класс Syslog::Logger
Syslog::Logger — это аналог Logger, который записывает данные в syslog вместо файла. Можно использовать Syslog::Logger для агрегации логов между несколькими машинами.
По умолчанию Syslog::Logger использует имя программы 'ruby', но это можно изменить, передав первый аргумент в ::new.
ВАЖНО! Можно установить имя программы Syslog::Logger только при первом инициализации Syslog::Logger. Это ограничение связано с тем, как Syslog::Logger использует syslog (и, отчасти, с ограничением в работе syslog(3)). Попытки изменить имя программы Syslog::Logger после первой инициализации будут проигнорированы.
Пример
Следующий код запишет данные в syslogd на вашей локальной машине:
require 'syslog/logger' log = Syslog::Logger.new 'my_program' log.info 'this line will be logged via syslog(3)'
Также можно установить уровень сервиса для указания уровня сервиса, который будет использоваться:
log.info 'this line will be logged using Syslog default facility level' log_local1 = Syslog::Logger.new 'my_program', Syslog::LOG_LOCAL1 log_local1.info 'this line will be logged using local1 facility level'
Возможно, вам потребуется выполнить предварительную настройку syslog.conf. Для систем BSD добавьте следующие строки в /etc/syslog.conf:
!my_program *.* /var/log/my_program.log
Затем создайте файл /var/log/my_program.log и отправьте сигнал HUP в syslogd (killall -HUP syslogd в FreeBSD).
Если вам нужно, чтобы логи автоматически переносились и архивировались, см. страницы руководства newsyslog.conf(5) и newsyslog(8).
Константы
- LEVEL_MAP
-
Сопоставляет типы предупреждений Logger с типами предупреждений syslog(3).
Сообщения из приложений Ruby не считаются критичными, как сообщения от других системных демонов, использующих syslog(3), поэтому большинство сообщений снижается на один уровень. Например, сообщение fatal для Logger Ruby считается ошибкой в syslog(3).
- VERSION
-
Версия Syslog::Logger, которую вы используете.
Атрибуты
Аргумент facility используется для указания типа программы, которая регистрирует сообщение.
Форматировщик логов, как Proc который принимает четыре аргумента и возвращает отформатированное сообщение. Аргументы:
-
severity -
Уровень серьезности сообщения лога.
-
time -
Объект Time, представляющий момент регистрации сообщения.
-
progname -
Настроенное имя программы progname или переданное в метод logger.
-
msg -
Объект, переданный пользователем в сообщение лога; не обязательно строка.
Блок должен вернуть объект Object, который можно записать в устройство регистрации через write. По умолчанию используется форматировщик по умолчанию.
Уровень лога для совместимости с Logger.
Открытые методы класса
# File ext/syslog/lib/syslog/logger.rb, line 106
def self.make_methods meth
level = ::Logger.const_get(meth.upcase)
eval <<-EOM, nil, __FILE__, __LINE__ + 1
def #{meth}(message = nil, &block)
add(#{level}, message, &block)
end
def #{meth}?
@level <= #{level}
end
EOM
end Создает методы для уровня meth.
# File ext/syslog/lib/syslog/logger.rb, line 190 def initialize program_name = 'ruby', facility = nil @level = ::Logger::DEBUG @formatter = Formatter.new @@syslog ||= Syslog.open(program_name) @facility = (facility || @@syslog.facility) end
Заполняет переменные для совместимости с Logger. Если это первый экземпляр Syslog::Logger, program_name может быть установлен для изменения имени регистрируемой программы. facility может быть установлен для указания уровня сервиса, который будет использоваться.
Из-за особенностей работы syslog, может быть выбрано только одно имя программы.
# File ext/syslog/lib/syslog/logger.rb, line 92 def self.syslog @@syslog end
Возвращает внутренний объект Syslog, который инициализируется при создании первого экземпляра.
# File ext/syslog/lib/syslog/logger.rb, line 99 def self.syslog= syslog @@syslog = syslog end
Указывает внутренний объект Syslog, который будет использоваться.
Открытые методы экземпляра
# File ext/syslog/lib/syslog/logger.rb, line 202
def add severity, message = nil, progname = nil, &block
severity ||= ::Logger::UNKNOWN
@level <= severity and
@@syslog.log( (LEVEL_MAP[severity] | @facility), '%s', formatter.call(severity, Time.now, progname, (message || block.call)) )
true
end Почти дублирует #add. progname игнорируется.
# File ext/syslog/lib/syslog/logger.rb, line 155
Регистрирует message на уровне отладки (syslog debug), или регистрирует сообщение, возвращенное из блока.
# File ext/syslog/lib/syslog/logger.rb, line 137
Регистрирует message на уровне ошибки (syslog предупреждение), или регистрирует сообщение, возвращенное из блока.
# File ext/syslog/lib/syslog/logger.rb, line 131
Регистрирует message на уровне fatal (syslog ошибка), или регистрирует сообщение, возвращенное из блока.
# File ext/syslog/lib/syslog/logger.rb, line 149
Регистрирует message на уровне информации (syslog информация), или регистрирует сообщение, возвращенное из блока.
# File ext/syslog/lib/syslog/logger.rb, line 125
Регистрирует message на уровне неизвестно (syslog предупреждение), или регистрирует сообщение, возвращенное из блока.
# File ext/syslog/lib/syslog/logger.rb, line 143
Регистрирует message на уровне предупреждения (syslog уведомление), или регистрирует сообщение, возвращенное из блока.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.