Python 如何配置rsyslog以便与SysLogHandler日志类一起使用?
为了将“myapp”的日志消息写入Python 如何配置rsyslog以便与SysLogHandler日志类一起使用?,python,python-3.x,logging,rsyslog,Python,Python 3.x,Logging,Rsyslog,为了将“myapp”的日志消息写入/var/log/local5.log,我使用 问题 “myapp”运行良好,没有错误,但没有记录任何内容,/var/log/local5.log保持为空 日志记录配置 日志配置文件的相关部分: handlers: mainHandler: class: logging.handlers.SysLogHandler level: INFO formatter: defaultFormatter
/var/log/local5.log
,我使用
问题
“myapp”运行良好,没有错误,但没有记录任何内容,/var/log/local5.log
保持为空
日志记录配置
日志配置文件的相关部分:
handlers:
mainHandler:
class: logging.handlers.SysLogHandler
level: INFO
formatter: defaultFormatter
address: '/dev/log'
facility: 'local5'
loggers:
__main__:
level: INFO
handlers: [mainHandler]
测井试验
下面是我如何尝试在“myapp”的主脚本中编写日志:
我在/usr/lib/python3.4/logging/handlers.py
中添加了一些sys.stderr.write()
,以查看发生了什么,我得到了:
$ myapp
[SysLogHandler._connect_unixsocket()] Sucessfully connected to socket: /dev/log
[SysLogHandler.emit()] called
[SysLogHandler.emit()] msg=b'<174>2016/04/23 07:17:00.453 myapp: main: Starting\x00'
[SysLogHandler.emit()] msg sent to unix socket (no OSError)
/etc/rsyslog.d/40 local.conf
:
local5.* /var/log/local5.log
$template MyappTpl,"%$now% %timegenerated:12:23:date-rfc3339% %syslogtag%%msg%\n"
local5.* /var/log/local5.log;MyappTpl
lsof
输出,看起来rsyslogd
正在收听/dev/log
(还是我错了?)
我没有把整个rsyslogd-N1
输出放进去,因为它有点长,但是提到的“本地”行:
我不明白我错过了什么。与我使用的版本(7.4.4)匹配似乎过时了,我找不到自己的方式。我不确定那是解决我问题的地方
编辑:
- 无法定义“个人”功能,如“myapp”(即使它是在
中定义的),因此我改为使用“local5”功能rsyslog.conf
/var/log/local5.log
的所有者和组不合适(root:root
)。它们不合适,因为/etc/rsyslog.conf
明确告诉所有者和组应该是syslog:syslog
:
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
不幸的是,应该处理的其他日志文件rsyslog
(如auth.log
)也是root:root
,因此,从ls-lah
中可以看出,我的日志文件与其他日志文件没有什么不同…(这些文件也是空的,我想知道为什么默认情况下会安装这种非功能性配置)
不幸的是,rsyslog
没有记录任何错误(或者至少我没有找到错误的位置)
完成rsyslog配置时可能有用的更多详细信息
作为旁注,rsyslog
需要为它获取的消息使用一种特殊的格式,如果没有,它会在默认情况下添加一些信息(时间戳主机名)。可以修改它们。无论如何,从我的python脚本中,我决定只将消息发送到日志,并让rsyslog
格式化输出。因此,我的日志配置文件的相关部分是:
formatters:
rsyslogdFormatter:
format: '%(filename)s: %(funcName)s: %(message)s'
handlers:
mainHandler:
class: logging.handlers.SysLogHandler
level: INFO
formatter: rsyslogdFormatter
address: '/dev/log'
facility: 'local5'
loggers:
__main__:
level: INFO
handlers: [mainHandler]
我在/etc/rsyslog.conf
中添加了一个自定义模板:
local5.* /var/log/local5.log
$template MyappTpl,"%$now% %timegenerated:12:23:date-rfc3339% %syslogtag%%msg%\n"
local5.* /var/log/local5.log;MyappTpl
并相应地修改了/etc/rsyslog.d/40 local.conf
:
local5.* /var/log/local5.log
$template MyappTpl,"%$now% %timegenerated:12:23:date-rfc3339% %syslogtag%%msg%\n"
local5.* /var/log/local5.log;MyappTpl
我还想提到的是,匹配包(rsyslog doc
forubuntu)提供的文档当然与安装的版本相匹配,并且提供了在线文档中没有的提示