python - 如何在 python sysloghandler 中设置自定义应用程序名称

我正在使用 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')

最佳答案

您可以使用 $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

希望对您有所帮助。

https://stackoverflow.com/questions/15398965/

相关文章:

date - 如何从json中获取AngularJS日期

python - 是否有 matplotlib.ticker.LogFormatterSciNota

haskell - 使用 Haskell 的工程符号

vim - 在 Vim 中使用 AStyle

c++ - 将字符打印为整数

visual-studio-code - vs 代码更漂亮 - 在 Angular 中的 @Inpu

python - 意外 'reflowed' ,如何撤消长换行符?

c# - 从具有多个零值的枚举中获取项目名称

vba - 复制行内容和格式(到另一张纸)

netbeans - NetBeans 中是否有任何隐藏的 Javascript 代码格式设置?