我有一个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
答案 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("~")