簡體   English   中英

從python腳本寫入/ var / log中的日志的最佳實踐?

[英]Best practice to write logs in /var/log from a python script?

我想從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',)

如果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日志記錄類?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM