python - 将日志文件保存在用户主目录中

标签 python logging

我有一个 logging.conf [1] 文件来配置我的 python 应用程序中的日志记录。

...
[handler_file_log_handler]
class=logging.handlers.TimedRotatingFileHandler
level=INFO
formatter=simple
args=('/var/log/myapp/myapp.log',)

如您所见,我将日志文件存储在/var/log/myapp 目录中。

我希望将其存储在用户(管理应用程序的用户)主目录 (/home/myuser/.myapp/log) 中。所以,我的问题是:

为了能够将 python 应用程序的日志文件保存在用户主目录中,我应该在我的 logging.conf 中配置什么?

[1] - https://docs.python.org/2.6/library/logging.html#configuring-logging

最佳答案

是的,您可以将任何 Python 表达式作为参数传递!包括一个找到用户家的!

args=(f'{os.path.expanduser("~")}/myapp.log',)

对于 Python <= 3.5(无 f 字符串):

args=(os.path.expanduser("~") + '/myapp.log',)

为了完整起见,这里有一个最小的例子(用 3.5 和 3.9 测试过):

logging.conf

[loggers]
keys=root

[handlers]
keys=fileLogHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=fileLogHandler

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

[handler_fileLogHandler]
class=logging.handlers.TimedRotatingFileHandler
formatter=simpleFormatter
args=(os.path.expanduser("~") + '/myapp.log',)

主.py

import logging
import logging.config

logging.config.fileConfig('logging.conf')
log = logging.getLogger(__name__)
log.info('Testo')

补充说明: 我认为将 ~/myapp.log 作为路径传递会起作用,并让操作系统负责扩展,这实际上在 Python 的大多数地方都有效。但令人费解的是,这在 logging.conf 文件中不起作用!

args=('~/myapp.log',)

FileNotFoundError: [Errno 2] No such file or directory: 
    '/path/to/this/python/project/~/myapp.log'  # ???

关于python - 将日志文件保存在用户主目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38185266/

相关文章:

Python 替换嵌套 JSON 中的 None 值

asp.net-mvc - 在哪里放置审计或日志记录?

grails - Grails审核日志记录插件

c++ - 声明用于日志记录的类的模块名称

python - 如何在jupyter笔记本中指定单元格执行

python - 使用 Python 运行带参数的可执行文件

java - 将写入 Tomcat 的 catalina.out 日志级别的 servlet 的日志级别限制为

python - 日志记录和 CherryPy 可以共享相同的配置文件吗?

python - 跨pandas 数据框所有列的数学运算,无论其大小如何

python - 如何连接两个具有特殊条件的表