我想从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',)
答案 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?