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

时间:2016-07-04 12:52:41

标签: 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)中。所以,我的问题是:

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

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

2 个答案:

答案 0 :(得分:0)

是的,您可以传递任何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',)

main.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'  # ???

答案 1 :(得分:-1)

可以使用以下命令找到用户的主目录(在任何操作系统上):

os.path.expanduser("~")