Как изменить "тег" при входе в syslog из "Неизвестно"?
Я вхожу в syslog в порядке, но не могу определить, как указать "тег". В настоящее время журнал регистрирует это:
Mar 3 11:45:34 TheMacMini Unknown: INFO FooBar
но я хочу, чтобы "Неизвестный" был настроен на что-то. например:
Mar 3 11:45:34 TheMacMini Foopybar: INFO FooBar
Если я использую logger
из командной строки, его можно контролировать с помощью опции -t
...
$ logger -t Foopybar FooBar && tail -1 /var/log/system.log
Mar 3 12:05:00 TheMacMini Foopybar[4566]: FooBar
Но запись с python я, похоже, не могу указать тег:
import logging
logging.info("FooBar")
Просто дает мне тег "Неизвестный" , показанный вверху. Я определил эту спецификацию:
LOGGING = {
'version': 1,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'syslog':{
'address': '/var/run/syslog',
'class': 'logging.handlers.SysLogHandler',
'facility': 'local2',
'formatter': 'simple'
}
},
'loggers': {
'': {
'handlers': ['syslog'],
'level': 'INFO',
}
}
}
Как указать тег, чтобы он не всегда "Неизвестный" ?
Ответы
Ответ 1
Простой способ пометки сообщений журнала
Сделайте это:
logging.info("TagName: FooBar")
и ваше сообщение будет помечено! Вам просто нужно запустить все ваши сообщения с помощью "TagName:". И это, конечно, не очень элегантно.
Лучшее решение
Настройка регистратора:
log = logging.getLogger('name')
address=('log-server',logging.handlers.SYSLOG_UDP_PORT)
facility=logging.handlers.SysLogHandler.LOG_USER
h=logging.handlers.SysLogHandler( address,facility )
f = logging.Formatter('TagName: %(message)s')
h.setFormatter(f)
log.addHandler(h)
И используйте его:
log.info('FooBar')
Ответ 2
Я добавляю это только ради завершения, хотя ответ @sasha абсолютно прав.
Если вы случайно регистрируете сообщения в syslog с помощью syslog.syslog
, вы можете установить тег с помощью функции syslog.openlog
:
import syslog
syslog.openlog('foo')
syslog.syslog('bar')
Возвращаясь к оболочке linux:
$ tail -f /var/log/syslog
Sep 7 07:01:58 dev-balthazar foo: bar