2012-03-03 47 views
13

我记录到系统日志很好,但不能解决如何指定'标记'。目前日志记录这篇文章:如何从'未知'登录到系统日志时更改'标记'?

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', 
      } 
    } 
} 

如何指定标签,使其不总是“未知”?

回答

12

标记日志消息的简单方法

这样做: 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') 
4

我加入这个刚刚完成的缘故,即使@莎莎的回答是完全正确。

如果你碰巧日志消息直接使用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 
+0

这是正确的回答 – shrewmouse 2016-06-28 13:54:18