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
块上,但我不知道如何解决。谁能解释一下这种情况。
日志记录模块的 FileHandler
会为您处理。不需要复杂。
处理程序采用可选的 mode
参数,以指定它是开始写入数据还是向其附加数据。
来自the docs:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
The specified file is opened and used as the stream for logging. If
mode
is not specified, 'a'
is used.
当你运行
LOG = logging.getLogger('log_filename')
第一次创建全局变量。
因此,您还可以将以下代码添加到上面的脚本中:
global LOG
if LOG is not None:
print("found logger !")
else:
("no global variable logger found")
如@mightypile 所述,对于尝试创建类似 logs/mylogfile.log
的新目录结构的任何人,FileHandler 不会为您创建新的目录结构。我用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)
我正在编写一些使用 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
块上,但我不知道如何解决。谁能解释一下这种情况。
日志记录模块的 FileHandler
会为您处理。不需要复杂。
处理程序采用可选的 mode
参数,以指定它是开始写入数据还是向其附加数据。
来自the docs:
class logging.FileHandler(filename, mode='a', encoding=None, delay=False)
The specified file is opened and used as the stream for logging. If
mode
is not specified,'a'
is used.
当你运行
LOG = logging.getLogger('log_filename')
第一次创建全局变量。 因此,您还可以将以下代码添加到上面的脚本中:
global LOG
if LOG is not None:
print("found logger !")
else:
("no global variable logger found")
如@mightypile 所述,对于尝试创建类似 logs/mylogfile.log
的新目录结构的任何人,FileHandler 不会为您创建新的目录结构。我用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)