从"未知"登录到syslog时如何更改"标记"?

Joh*_*Mee 16 python django osx-lion

我正在登录系统日志,但无法确定如何指定'标签'.日志记录目前发布:

Mar  3 11:45:34 TheMacMini Unknown: INFO FooBar
Run Code Online (Sandbox Code Playgroud)

但我希望将"未知"设置为某种东西.例如:

Mar  3 11:45:34 TheMacMini Foopybar: INFO FooBar
Run Code Online (Sandbox Code Playgroud)

如果我logger从命令行使用它可以通过-t选项控制...

$ logger -t Foopybar FooBar && tail -1 /var/log/system.log
Mar  3 12:05:00 TheMacMini Foopybar[4566]: FooBar
Run Code Online (Sandbox Code Playgroud)

但是从python登录我似乎无法指定标记:

import logging
logging.info("FooBar")
Run Code Online (Sandbox Code Playgroud)

只是给我顶部显示的"未知"标签.我已经定义了这个规范:

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',
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*der 13

标记日志消息的简单方法

这样做: 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)
Run Code Online (Sandbox Code Playgroud)

并使用它:

log.info('FooBar')
Run Code Online (Sandbox Code Playgroud)


Bal*_*rol 5

即使@sasha的回答绝对正确,我也只是为了完成而添加此内容。

如果您碰巧直接使用将消息记录到syslog syslog.syslog,则可以使用以下syslog.openlog功能设置标签:

import syslog
syslog.openlog('foo')
syslog.syslog('bar')
Run Code Online (Sandbox Code Playgroud)

回到linux shell:

$ tail -f /var/log/syslog
Sep  7 07:01:58 dev-balthazar foo: bar
Run Code Online (Sandbox Code Playgroud)