我有一个 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/