当我在文件名的路径上添加前缀时,Python日志记录不会写入文件

yjghlzjz  于 2023-02-20  发布在  Python
关注(0)|答案(1)|浏览(128)

最近在我写的一个新程序上设置了一些日志。我用一个配置文件(logging.conf)来配置它,然后用logging.config.fileConfig()调用它。它可以很好地记录到控制台,但我也想开始写日志文件。做了必要的更新,它工作了。然后我注意到我的日志文件在应用程序的工作目录中。没什么大不了的;我忘了在日志文件名前面加上日志目录的路径。一旦我这样做了,它就拒绝生成文件或写入文件。不知道为什么。我放了一个logger语句来输出日志文件的路径,它是有效的。如果我删除路径,它会再次写入程序目录。有什么想法吗?
下面是我调用logging.conf的方法:

working_dir = "/app_2/TSM_data_collector"
log_dir = working_dir + "/logs"
raw_data_dir = working_dir + "/rawdata"
clean_data_dir = working_dir + "/cleandata"

log_file_name = log_dir + "/" + datetime.strftime(datetime.now(), '%Y-%m-%d') + "_tsm_orchestrator.log"
logging.config.fileConfig('logging.conf', defaults={'logfilename': log_file_name})
logger = logging.getLogger('TSM_orchestrator')

下面是logging.conf的内容:

[loggers]
keys=root,TSM_orchestrator

[handlers]
keys=consoleHandler,fileHandler

[formatters]
keys=baseFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_TSM_orchestrator]
level=DEBUG
handlers=consoleHandler, fileHandler
qualname=TSM_orchestrator
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=baseFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=baseFormatter
args=('%(logfilename)s','a')

[formatter_baseFormatter]
format=%(asctime)s,%(levelname)s,%(name)s,%(message)s
datefmt=%Y-%m-%d %H:%M:%S
l7mqbcuq

l7mqbcuq1#

终于想明白了...
我不得不把这些都搬走:

working_dir = "/app_2/TSM_data_collector"
log_dir = working_dir + "/logs"
raw_data_dir = working_dir + "/rawdata"
clean_data_dir = working_dir + "/cleandata"

log_file_name = log_dir + "/" + datetime.strftime(datetime.now(), '%Y-%m-%d') + "_tsm_orchestrator.log"
logging.config.fileConfig('logging.conf', defaults={'logfilename': log_file_name})
logger = logging.getLogger('TSM_orchestrator')

下面是:

if __name__ == '__main__':

我从来没有想过要尝试这个,因为在过去我自己做日志,并打开日志文件以上的__main__和下面的导入语句,总是工作。想到今天尝试这个,它终于写入日志文件。
为什么当配置文件超过__main__时,它还能记录到控制台呢?如果我没有设置任何路径,它会写一个文件到主应用程序目录。如果我删除了../logs/文件夹,它会为文件夹丢失而哭泣。但是,我永远无法让它实际将输出写入../logs/目录中的文件。我觉得这是一个bug,但我将暂时代表我将其钉在无知上=^.^=

相关问题