最近在我写的一个新程序上设置了一些日志。我用一个配置文件(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
1条答案
按热度按时间l7mqbcuq1#
终于想明白了...
我不得不把这些都搬走:
下面是:
我从来没有想过要尝试这个,因为在过去我自己做日志,并打开日志文件以上的
__main__
和下面的导入语句,总是工作。想到今天尝试这个,它终于写入日志文件。为什么当配置文件超过
__main__
时,它还能记录到控制台呢?如果我没有设置任何路径,它会写一个文件到主应用程序目录。如果我删除了../logs/文件夹,它会为文件夹丢失而哭泣。但是,我永远无法让它实际将输出写入../logs/目录中的文件。我觉得这是一个bug,但我将暂时代表我将其钉在无知上=^.^=