我正在使用python sysloghander将日志发送到集中式syslog服务器。代码正在运行,但我在定制格式时面临一些问题。下面是我写的代码。
#!/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')
答案 0 :(得分:3)
您可以使用$syslogfacility-text
(请参阅docs) - 它允许您通过谓词轻松过滤日志消息。
因此,在客户端,它会像:
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
希望有所帮助。