Я не могу разобраться в logging
модуле Python . Мои потребности очень просты: я просто хочу записывать все в системный журнал. Прочитав документацию, я придумал этот простой тестовый сценарий:
import logging
import logging.handlers
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
handler = logging.handlers.SysLogHandler()
my_logger.addHandler(handler)
my_logger.debug('this is debug')
my_logger.critical('this is critical')
Но этот сценарий не производит никаких записей журнала в системном журнале. В чем дело?
Ответы:
Измените строку на эту:
Это работает для меня
источник
'/var/run/syslog'
это правильная вещь для OS X.logging.Formatter(fmt='myscriptname[%(process)d]: %(levelname)s: %(message)s', ...)
, условие rsyslog вроде$programname == 'myscriptname'
работает.Вы всегда должны использовать локальный хост для ведения журнала, будь то / dev / log или localhost через стек TCP. Это позволяет полностью совместимому с RFC и функциональному демону ведения системного журнала обрабатывать системный журнал. Это устраняет необходимость в работоспособности удаленного демона и обеспечивает расширенные возможности демона syslog, например, rsyslog и syslog-ng. Та же философия применяется к SMTP. Просто передайте его в локальное программное обеспечение SMTP. В этом случае используйте «программный режим», а не демон, но это та же идея. Пусть с этим справится более способное программное обеспечение. Возможны повторные попытки, постановка в очередь, локальная буферизация, использование TCP вместо UDP для системного журнала и т. Д. Вы также можете [перенастроить] эти демоны отдельно от вашего кода, как это должно быть.
Сохраните код для своего приложения, пусть другое программное обеспечение выполняет свою работу согласованно.
источник
Я обнаружил, что модуль syslog упрощает получение описанного вами базового поведения ведения журнала:
Есть и другие вещи, которые вы могли бы сделать, но даже первые две строчки из них дадут вам то, о чем вы просили, насколько я понимаю.
источник
Собирая вещи здесь и из других мест, я придумал, что работает на unbuntu 12.04 и centOS6.
Создайте файл с расширением
/etc/rsyslog.d/
.conf и добавьте следующий текстПерезагрузка
rsyslog
, перезагрузка не работает для новых файлов журнала. Может быть, он только перезагружает существующие файлы conf?Затем вы можете использовать эту тестовую программу, чтобы убедиться, что она действительно работает.
источник
sudo service rsyslog restart
Я добавляю небольшой дополнительный комментарий на тот случай, если он кому-то поможет, потому что я нашел этот обмен полезным, но мне нужна была небольшая дополнительная информация, чтобы все заработало.
Чтобы войти в определенное средство с помощью SysLogHandler, вам необходимо указать значение средства. Скажем, например, что вы определили:
local3.* /var/log/mylog
в системном журнале вы захотите использовать:
handler = logging.handlers.SysLogHandler(address = ('localhost',514), facility=19)
и вам также необходимо, чтобы syslog прослушивал UDP, чтобы использовать localhost вместо / dev / log.
источник
Настроен ли ваш syslog.conf для обработки объекта property = user?
Вы можете установить средство, используемое регистратором Python, с аргументом объекта, примерно так:
источник
LOG_DAEMON
вы указываете в качестве значенияfacility
параметра.SysLogHandler.LOG_DAEMON
.приведенный выше сценарий будет регистрироваться в LOCAL0 с нашим пользовательским "LOG_IDENTIFIER" ... вы можете использовать LOCAL [0-7] для локальных целей.
источник
Из https://github.com/luismartingil/per.scripts/tree/master/python_syslog
источник
Вот способ yaml dictConfig, рекомендованный для версии 3.2 и новее.
В журнале
cfg.yml
:Загрузите конфигурацию, используя:
Настроил как системный журнал, так и прямой файл. Обратите внимание, что это
/dev/log
зависит от ОС.источник
Исправляю на блокноте. Служба rsyslog не прослушивает службу сокетов.
Я настроил эту строку ниже в
/etc/rsyslog.conf
файле и решил проблему:$SystemLogSocketName /dev/log
источник
Вы также можете добавить обработчик файлов или вращающийся обработчик файлов для отправки журналов в локальный файл: http://docs.python.org/2/library/logging.handlers.html
источник