从python脚本写入/ var/log中的日志的最佳实践?

zez*_*llo 9 python linux logging freebsd python-3.x

我想从python的主脚本中将一些日志信息写入/ var/log中的文件.

当我调用时logger.info("Starting"),我在文件上得到一个PermissionError,这是很正常的,因为/ var/log中的文件属于root,而我的程序不是以root身份运行的.

我当然可以设置/var/log/my.log权限,以便myapp写入它.(例如,设置相同的组).但对我来说这看起来不是一个好习惯:如果我在另一台计算机上安装myapp怎么办?我应该在安装过程中更改日志文件的权限吗?或者还有另一种更通用的方法吗?(就像将日志发送到"系统"的通用方法一样?通用我的意思也是可移植的,什么适用于linux,freebsd等)

虽然我不确定它是否相关,但是对于信息,这里是我的代码的一些部分:

主要脚本:

import logging, logging.config

from lib import settings
settings.init()

logging.config.fileConfig(settings.logging_conf_file)
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

处理程序匹配settings.logging_conf_file,在日志配置文件中:

[handler_mainHandler]
class=FileHandler
level=INFO
formatter=defaultFormatter
filemode=w
args=('/var/log/myapp.log',)
Run Code Online (Sandbox Code Playgroud)

小智 9

如果syslogd正在您的盒子上运行,您可以尝试使用SysLogHandler来避免文件夹权限问题(https://docs.python.org/2/library/logging.handlers.html#sysloghandler).

要指定类别,需要将facility参数设置为所需,例如LOG_LOCAL5.在这种情况下,它将对应于sys5d的local5.*类别.

当您将facility指定为处理程序参数但不指定文件名时,您需要调整syslog配置以说syslogd将日志记录写入特定文件.在FreeBSD中,syslog conf文件是/etc/syslog.conf(syslog.conf(5)).

您也可以添加syslog映射.到/var/log/all.log来处理来自所有syslog生成器的所有日志.如果有疑问,确定日志记录是否有效以及您的应用程序类别是有帮助的.

对于rsyslogd,可以在这里获得更多信息:如何配置rsyslog以用于SysLogHandler日志记录类?