Python日志记录,更改文件

2024-10-06 10:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python日志工具的WatchedFileHndler, 此处理程序监视日志文件是否已更改(logrotate等),并在更改后重新打开该文件。在

我的进程以根用户身份运行。在

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

我怎么能做到呢?在

谢谢


Tags: 文件工具用户处理程序进程身份logrotatewatchedfilehandler
2条回答

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

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)

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

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

^{pr2}$

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

实际上,几乎从来没有理由以根用户身份运行服务。这几乎总是一个安全问题。除此之外,Python的os模块还提供了您需要的功能:

os.chown(path, uid, gid)

https://docs.python.org/2/library/os.html

相关问题 更多 >