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

时间:2016-04-21 07:01:39

标签: python linux python-3.x logging freebsd

我想从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__)

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

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

1 个答案:

答案 0 :(得分: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,可以在此处获取更多信息:How to configure rsyslog for use with SysLogHandler logging class?