8

我正在使用 python sysloghander 将日志发送到集中式系统日志服务器。该代码正在运行,但我在自定义格式时遇到了一些问题。下面是我写的代码。

#!/usr/bin/python

import logging
from logging.handlers import SysLogHandler
import subprocess

hostname = subprocess.check_output(['hostname', '-f'])
logger = logging.getLogger()
logger.setLevel(logging.INFO)
syslog = SysLogHandler(address=('log.central.log', 514))
formatter = logging.Formatter('%(asctime)s %(name)s: %(levelname)s %(message)s', '%b %e %H:%M:%S')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
logger.info("My Message")

是否可以在日志格式化程序中添加自定义标签/变量。我想在它们中添加主机名和 app_name,因为我已经设置了中央日志服务器以基于主机名和 app_name 创建日志文件。

app_name 可以是任何东西,比如我可以将 app_name 设置为“mysql_communication_log”或“wsgi_log”,然后在中央服务器上创建具有相同名称的单独文件。

我正在寻找的是类似的东西

formatter = logging.Formatter('%(asctime)s %(hostname)s %(app_name)s: %(message)s', '%b %e %H:%M:%S')
4

1 回答 1

4

您可以使用$syslogfacility-text(请参阅文档)-它允许您通过谓词轻松过滤日志消息。

所以,在客户端,它会像:

hostname = "stage-server"
formatter = logging.Formatter('{}:%(asctime)s %(name)s: %(levelname)s %(message)s'.format(hostname), '%b %e %H:%M:%S')

在你身上rsyslog.conf

if $syslogfacility-text == 'stage-server' then /var/log/stage-server/my.log

希望有帮助。

于 2013-06-20T19:57:35.190 回答