gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:58:35 25 4
gpt4 key购买 nike

我正在使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com