提问人:CiaranWelsh 提问时间:1/20/2017 最后编辑:DennisLiCiaranWelsh 更新时间:6/6/2023 访问量:58781
Python 日志记录:如果不存在,则创建日志,如果存在,则打开并继续日志记录
Python logging: create log if not exists or open and continue logging if it does
问:
我正在编写一些使用 python 系统的代码。这个想法是,如果尚不存在,请创建日志,但如果存在,则获取日志并继续记录到该文件。这是我的代码:logging
LOG
import logging
import os
log_filename='Transactions.log')
if os.path.isfile(log_filename)!=True:
LOG = logging.getLogger('log_filename')
LOG.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('log_filename')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter and add it to the handlers
formatter = logging.Formatter('-->%(asctime)s - %(name)s:%(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
LOG.addHandler(fh)
LOG.addHandler(ch)
else:
LOG=logging.getLogger()
我怀疑问题出在我的块上,但我不知道如何解决。谁能说明这种情况。else
答:
42赞
hjpotter92
1/20/2017
#1
日志记录模块会为您处理这个问题。无需复杂性。FileHandler
处理程序采用一个可选参数,以指定它是开始写入数据还是向其追加数据。mode
从文档中:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
指定的文件将被打开并用作日志记录的流。如果未指定,则使用。
mode
'a'
评论
40赞
mightypile
4/8/2018
如果该目录不存在,您仍会收到异常。日志记录很乐意为您创建一个新文件,但不是整个目录结构。
1赞
UserK
6/5/2018
如果不存在,@CiaranWelsh应指定哪种模式才能创建文件?
4赞
hjpotter92
6/5/2018
@UserK如果文件不存在,则可以或也可以。 将在下次运行时追加到同一文件,而 mode 将删除旧文件并创建一个全新的文件。另请阅读上面@mightypile评论的内容。a
w
a
w
0赞
user8491363
7/30/2020
在 Python 2.7 上,它似乎不起作用。 找不到路径,除非您显式使用FileHandler
os.makedirs()
0赞
Angelo
7/24/2018
#2
跑步时
LOG = logging.getLogger('log_filename')
首次创建全局变量。 因此,您还可以将以下代码添加到上面的脚本中:
global LOG
if LOG is not None:
print("found logger !")
else:
("no global variable logger found")
34赞
lotrgollum87
3/20/2019
#3
对于任何试图创建新目录结构的人,如@mightypile提到的,FileHandler 不会为您创建新的目录结构。我曾经确保目录结构。logs/mylogfile.log
os.makedirs
import os
import logging
log_filename = "logs/output.log"
os.makedirs(os.path.dirname(log_filename), exist_ok=True)
file_handler = logging.FileHandler(output_filename, mode="w", encoding=None, delay=False)
评论
0赞
hackinghorn
11/21/2023
谢谢!我相信它在最后一行log_filename
评论
LOG