重新开始记录到新文件(Python)
我正在使用以下代码初始化应用程序中的日志记录:重新开始记录到新文件(Python),python,logging,rotation,Python,Logging,Rotation,我正在使用以下代码初始化应用程序中的日志记录: logger = logging.getLogger() logger.setLevel(logging.DEBUG) # log to a file directory = '/reserved/DYPE/logfiles' now = datetime.now().strftime("%Y%m%d_%H%M%S") filename = os.path.join(directory, 'dype_%s.log' % now) file_han
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# log to a file
directory = '/reserved/DYPE/logfiles'
now = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = os.path.join(directory, 'dype_%s.log' % now)
file_handler = logging.FileHandler(filename)
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(filename)s, %(lineno)d, %(funcName)s: %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# log to the console
console_handler = logging.StreamHandler()
level = logging.INFO
console_handler.setLevel(level)
logger.addHandler(console_handler)
logging.debug('logging initialized')
如何关闭当前日志文件并重新启动新文件的日志记录
注意:我不想使用RotatingFileHandler,因为我想完全控制所有文件名。如果您想使用
removeHandler
和addHandler
或者,您可以访问logger.handler[此处的\u handler\u索引].stream
并手动替换流,但我建议使用前者而不是后者
logger.handlers[0].stream.close()
logger.removeHandler(logger.handlers[0])
file_handler = logging.FileHandler(filename)
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s %(filename)s, %(lineno)d, %(funcName)s: %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
以下是我的工作:
def initLogging(filename):
global logger
if logger == None:
logger = logging.getLogger()
else: # wish there was a logger.close()
for handler in logger.handlers[:]: # make a copy of the list
logger.removeHandler(handler)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt='%(asctime)s: %(message)s', datefmt='%I:%M:%S')
fh = logging.FileHandler(filename)
fh.setFormatter(formatter)
logger.addHandler(fh)
sh = logging.StreamHandler(sys.stdout)
sh.setFormatter(formatter)
logger.addHandler(sh)
所以我可以使用这个?:logger.removeHandler(logger.handlers[0])@Compie,是的,这样就可以了。您可能希望先使用
logger.handlers[0].stream.close()
。如果您有StreamHandler(),请不要关闭stdout或stderr。是否需要if语句和全局变量?getLogger()将始终返回相同的实例(有效地为您获取全局变量的值)