如何在从“未知”登录到syslog时更改“标记”?

2024-06-07 01:08:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以登录到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',
            }
    }
}

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


Tags: 标记infologvarlogginghandlers记录logger
2条回答

标记日志消息的简单方法

执行以下操作: logging.info("TagName: FooBar") 你的信息将被标记!您只需要用“标记名:”开始所有消息。这当然不是很优雅。

更好的解决方案

设置记录器:

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')

我添加这个只是为了完成,尽管@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

相关问题 更多 >