首页 > 解决方案 > 在 Python 中使用 if/else 语句进行日志记录是否存在一些中断?

问题描述

使用 if/else 语句记录是否有一些中断?我有 if/else 分支,我需要记录它们。我使用两个函数进行日志记录:

def write_log(var1, var2, var3):
    log_file = 'C:\\path\\file.log'
    logging.basicConfig(filename=log_file, filemode='w', format='%(message)s', level=logging.INFO)
    log_message = f'{var1} : {var2} in {var3}'
    logging.info(log_message)

几乎相同,但 log_file 变量:

def write_another_log(var1, var2, var3):
    log_file = 'C:\\path\\another_file.log'
    logging.basicConfig(filename=log_file, filemode='w', format='%(message)s', level=logging.INFO)
    log_message = f'{var1} : {var2} in {var3}'
    logging.info(log_message)

这是我的类功能的片段:

class Any():
    ...
    @statickmethod
    def needed_function():
        ...
        if one_statement:
            ...
            write_log(var1, var2, var3)

        if another_statement:
            ...
            write_another_log(var1, var2, var3)

在输出中我没有得到两个文件,所有信息都在一个文件中!我猜,这个功能会互相打断。我做了什么来修复它?挂了所有东西,但仍然不知道为什么它不起作用。

标签: pythonif-statementlogging

解决方案


logging.basicConfig应该只调用一次。如果它发现已经有一个处理程序,它将什么也不做。不再记录到多个文件basic(正如 basicConfig 所理解的那样)。

为此,您将设置您的日志记录,如下所示:

import logging

logger1 = logging.getLogger('logger1')
logger1.setLevel(logging.INFO)
fh1 = logging.FileHandler('path/to/file1.log')
fh1.setLevel(logging.INFO)
logger1.addHandler(fh1)

logger2 = logging.getLogger('logger2')
logger2.setLevel(logging.INFO)
fh2 = logging.FileHandler('path/to/file2.log')
fh2.setLevel(logging.INFO)
logger2.addHandler(fh2)

def write_log(var1, var2, var3):
    log_message = f'{var1} : {var2} in {var3}'
    logger1.info(log_message)

def write_another_log(var1, var2, var3):
    log_message = f'{var1} : {var2} in {var3}'
    logger2.info(log_message)

推荐阅读