【问题标题】:Properly using logging.setLoggerClass() in Python 3.8在 Python 3.8 中正确使用 logging.setLoggerClass()
【发布时间】:2020-07-25 18:01:01
【问题描述】:

我正在尝试创建自己的 Logger 类,然后在其他模块中重用它。 记录器类是: 我的包/log_class.py:

import logging
from logging.handlers import TimedRotatingFileHandler


class MyLogger(logging.Logger):
    
    def __init__(
        self, name = "MyLoggerName2222", log_file = None, 
        log_format = "%(asctime)s: Line %(lineno)s: %(levelname)s: %(message)s"):

        self.formatter = logging.Formatter(log_format)
        self.log_file = log_file

        super().__init__(name=name)

        # Adding handlers
        self.addHandler(self.get_stream_handler())
        if log_file:
            self.addHandler(self.get_file_handler(log_file))

        self.propagate = True

    def get_stream_handler(self):
        """ Returns stream handler
        """
        # Initialize stream hamdler
        streamhandler = logging.StreamHandler()
        
        # Logging level
        streamhandler.setLevel(logging.DEBUG)
        
        # Formatter
        streamhandler.setFormatter(self.formatter)
        
        return streamhandler 

    def get_file_handler(self, log_file):
        """ Returns file handler
        """

        # Initialize stream hamdler
        filehandler = TimedRotatingFileHandler(filename=log_file, 
                                               when="midnight",
                                               backupCount=5)
 
        # Logging level
        filehandler.setLevel(logging.INFO)
        
        # Formatter
        filehandler.setFormatter(self.formatter)
        
        return filehandler  

模块是: 我的包/main.py

from log_class import MyLogger
import logging

logging.setLoggerClass(MyLogger)
logger = logging.getLogger("MyLogger", log_file="Test.log")

if __name__ == "__main__":    

    logger.debug("Debug message")
    logger.info("Info message")

我有

TypeError: getLogger() 得到了一个意外的关键字参数“log_file” 当我从 getLogger 中删除 log_file="Test.log" 时,没有错误,但是没有显示日志消息。既不在文件中,也不在控制台中。 我到底做错了什么? 如何修改代码以便能够提供 log_file ? 提前致谢。

【问题讨论】:

  • 我能够在控制台中获取日志消息。但是仍然不清楚在这个构造中如何提供自定义日志文件名......

标签: python-3.x logging


【解决方案1】:

logging.getLogger() 方法接受一个关键字参数:name = ''。 您指定了两个参数,其中第一个是位置参数,第二个是关键字参数,其键名 log_file 无法识别。

当您将其更改为:

logger = logging.getLogger(name="Test.log")

代码运行没有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2020-04-29
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多