Python日志记录,更改文件所有者

标签 python logging

我正在使用Python日志记录工具WatchedFileHndler, 该处理程序监视日志文件是否已更改(logrotate 等),并在发生更改时重新打开该文件。

我的进程以 root 身份运行。

每次 WatchedFileHndler 重新创建文件时,我都需要通过 WatchedFileHandler 更改新创建的文件的文件所有者。

我怎样才能做到这一点?

谢谢

最佳答案

本文档中提供了一些有关如何在使用简单文件处理程序时将所有权应用于日志文件的建议:

https://docs.python.org/3.5/howto/logging-cookbook.html#customizing-handlers-with-dictconfig

我遵循该模式对 TimedRotatingFileHandler 执行类似的操作,因此我认为它适用于 WatchedFileHandler 但我还没有专门尝试过该类型。

首先,我创建了一个与文档中的函数类似但不完全相同的函数:

def owned_file_handler(filename, owner=None, *args, **kwargs):
    '''
    We need this so we can set ownership of the log files.
    See: https://docs.python.org/3.5/howto/logging-cookbook.html#customizing-handlers-with-dictconfig
    '''
    if owner:
        if not os.path.exists(filename):
            open(filename, 'a').close()
        shutil.chown(filename, *owner)
    return logging.handlers.TimedRotatingFileHandler(filename, *args, **kwargs)

我们的想法是完成我们需要做的工作,然后将所有其他参数传递给实际的处理程序。

以下是我如何更改字典中的处理程序配置:

         'file': {
+            '()': owned_file_handler,
+            'owner': ['www-data', 'root'],
             'level': 'INFO',
-            'class': 'logging.handlers.TimedRotatingFileHandler',
             'when': 'W0',
             'backupCount': 8,
             'filename': f'/var/log/django/django_{name}.log',
         },

我用我自己的函数的回调()替换了class(它将直接调用该类),并添加了新的owner 论证。它对我有用。

关于Python日志记录,更改文件所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096351/

相关文章:

javascript - 通过CGI将图像从html发送到python脚本

代码中的 WCF 跟踪不遵循 MessageLogging 设置

java - Jboss 5.1 中的应用程序特定日志记录

java - 删除 Java 中的日志

docker postfix - 缺少日志

python - 尝试为日期单元格着色时出现问题

Python Numpy 非零

python - 在单个单词字符串 PYTHON 中查找数字字符

python - 没有名为 'cv2.cv2' 的模块

python - 恢复以前的 Spyder 控制台的输出