如何在Python日志配置文件中指定相对路径?

11 投票
2 回答
9589 浏览
提问于 2025-04-15 22:34

我有一个文件用来设置日志记录:

[loggers]
keys=root

[handlers]
keys = root

[formatters]
keys = generic

# Loggers
[logger_root]
level = DEBUG
handlers = root

# Handlers
[handler_root]
class = handlers.RotatingFileHandler
args = ("test.log", "maxBytes=1*1024*1024", "backupCount=10")
level = NOTSET
formatter = generic

# Formatters
[formatter_generic]
format = %(asctime)s,%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %Y-%m-%d %H:%M:%S

在开发环境中,这个设置运行得很好,但当我把应用程序部署后,test.log 文件试图写入一个我没有权限的路径。

所以我的问题是,如何在这个配置文件中指定一个相对路径呢?

2 个回答

0

简单说一下,配置文件里指定的日志文件其实是相对于你运行程序的地方的。例如,当我在根目录下部署我的apache服务器,路径是"/path/to/root"。你指定的日志配置会尝试在"/path/to/root/test.log"这个位置写入日志。

可以看看这个讨论: 在Python日志配置文件中使用程序变量

7

马克说得对,你在配置文件中的路径是相对于调用logging.config.fileConfig时当前的工作目录。这取决于你部署代码的方式。

你可能需要指定一个绝对路径,也就是说在'test.log'前面加上一个你知道可以被代码运行的进程写入的目录。

另一个可能的问题是权限问题,跟你运行Django程序的用户有关:通常在运行开发服务器时,它是以你的账户运行的,所以你一般不会遇到权限问题。但在部署的时候(比如用Apache和mod_wsgi),Apache进程和/或mod_wsgi守护进程是以不同的账户运行的,这可能需要给相关文件夹设置权限。

如果你需要更多帮助,请提供关于你部署的更多细节,比如使用的方法、日志文件目录的位置等等。

撰写回答