【问题标题】:Logging module is not logging the output to output file (Filehandler isn't working)记录模块没有将输出记录到输出文件(文件处理程序不工作)
【发布时间】:2022-12-21 00:34:26
【问题描述】:

我为我的模块编写了一个函数,用于记录所有模块。 logger.py 脚本:

def create_logger(path,file_name):
        if logger is None:
              logger = logging.getLogger()
              logger.setLevel(logging.INFO)

        formatter = logging.Formatter(
            fmt="%(asctime)s %(levelname)s %(message)s",
            datefmt="%Y-%m-%d %H:%M:%S",
        )
        if not self.logger.hasHandlers():
            streamHandler = logging.StreamHandler()
            streamHandler.setFormatter(formatter)
            logger.addHandler(streamHandler)

        if path is not None or file_name is not None:

            fileHandler = logging.FileHandler(
                (f"{self.path}/{self.file_name}.log"), "w"
            )
            fileHandler.setFormatter(formatter)
            logger.addHandler(fileHandler)

我没有通过这个函数返回任何东西,因为它导致了一些模块特定的问题。(当我返回记录器时,一切都按照我的要求工作)。现在,因为我不返回记录器,所以我在使用 Filehandler 时遇到了一些问题。 我在整个模块中使用这种方法。例如: 一个.py

import logging
import create_logger
create_logger("logs","output")
logger=logging.getLogger(__name__)
def sum(a,b)
 c=a+b
 logger.info("All good!")
 return c

上面的代码按预期工作,但未生成输出文件。 我想将上述配置用于涉及多个记录器语句的其他脚本。例如: b.py

import logging
import create_logger
create_logger("logs","output")
logger=logging.getLogger(__name__)
sum(2,3)
logger.info("This is logging to same outfile file as well")

当上面的脚本运行时,我的输出日志文件应该有两个 logger.info 语句。 除了输出文件之外的所有内容都在生成。记录器按照指定格式将输出打印到 STDOUT,但文件不存在。你认为我哪里做错了?谢谢!

【问题讨论】:

  • 在函数范围之外创建记录器函数。

标签: python logging io filehandler


【解决方案1】:

该功能必须是这样的。

import logging

logger = None

def create_logger(path, file_name):
    global logger
    if logger is None:
        logger = logging.getLogger()
        logger.setLevel(logging.INFO)

    formatter = logging.Formatter(
        fmt="%(asctime)s %(levelname)s %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
    )
    if not logger.hasHandlers():
        streamHandler = logging.StreamHandler()
        streamHandler.setFormatter(formatter)
        logger.addHandler(streamHandler)

    if path is not None or file_name is not None:
        fileHandler = logging.FileHandler(
            (f"{path}/{file_name}.log"), "w"
        )
        fileHandler.setFormatter(formatter)
        logger.addHandler(fileHandler)

    return logger

import logging
from logger import create_logger

logger = create_logger("logs", "output")

def sum(a, b):
    c = a + b
    logger.info("All good!")
    return c

sum(2, 3)
logger.info("This is logging to same output file as well")

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多