Почему SysLogHandler Python требует адрес?
Этот код записывает в системный журнал, используя syslog
модуль:
import syslog
syslog.syslog(syslog.LOG_ERR, 'a')
А вот эквивалентный код, использующий logging
модуль:
import logging
from logging.handlers import SysLogHandler
logger = logging.getLogger()
logger.addHandler(SysLogHandler(address='/dev/log'))
logger.setLevel(logging.ERROR)
logger.error('a')
Если я пропущу address
параметр во втором фрагменте, он ничего не делает. Почему logging
версия требует от меня указать адрес, когда syslog
модуль может сам разобраться?
Я бы предпочел не указывать этот путь, так как он зависит от платформы. Я собираюсь написать свою собственную версию SysLogHandler, которая делегирует syslog
модуль?
2 ответа
syslog.syslog
API позволяет отправлять события в системный регистратор только на локальном компьютере, тогда как, указав адрес в журнале Python, вы можете регистрировать не только локальный компьютер, но и удаленный syslog
сервер. Таким образом, подход к ведению журнала охватывает более широкий круг обстоятельств, чем syslog.syslog
делает. Также обратите внимание, что на некоторых платформах / в некоторых средах syslog.syslog
не всегда был поточно-ориентированным (в прошлом), потому что базовый API системного вызова не был поточно-ориентированным в этих средах. Это может быть не так, но лучше проверить документацию для syslog
на вашей платформе. Для получения дополнительной информации см. Эту проблему Python.
Кроме того, вы можете войти в syslog
сервер с Windows-компьютеров, используя API регистрации (syslog
модуль недоступен в Windows).
Из документации:
Note that if your server is not listening on UDP port 514, SysLogHandler may appear not to work.
Вы убедились, что ваш системный журнал прослушивает порт по умолчанию (514), используемый SysLogHandler
? Если они не совпадают, вам нужно будет указать конкретный номер порта или путь к журналу для использования.
Смотрите: https://docs.python.org/2/library/logging.handlers.html