Python Logger对象不可调用

时间:2017-03-15 21:18:35

标签: python

我正在尝试编写一个模块,以便在不同的脚本中使用它

import logging
from logging.handlers import RotatingFileHandler


_logger_name = "Nagios"
_print_format = "%(asctime)s - %(levelname)s - %(message)s"
_level = logging.DEBUG

class Log():


    def __init__(self,log_file,logger_name=_logger_name,level=_level):
        self.log_file = log_file
        self.logger_name = logger_name
        self.level = level

    def getLog(self):

        """
        Return the logging object

        """
       _logger = logging.getLogger(self.logger_name)
       _logger.setLevel(self.level)
       _logger.addHandler(self._rotateLog())

       return _logger

    def _rotateLog(self):

       """
       Rotating the log files if it exceed the size
       """
       rh = RotatingFileHandler(self.log_file,
                             maxBytes=20*1024*1024, backupCount=2)
       formatter = logging.Formatter(_print_format)
       rh.setFormatter(formatter)
       return rh

log = Log("kdfnknf").getLog()
log("hello")

我看到以下错误:

Traceback (most recent call last):
File "nagiosLog.py", line 45, in <module>
  log("hello")
TypeError: 'Logger' object is not callable

知道我为什么会收到这个错误,

使用pdb调试时,我看到它返回对象并打印dir(log)我没有看到Logger模块。

我在这里遗漏了什么

2 个答案:

答案 0 :(得分:1)

请参阅logging文档:

你必须使用一个功能,你不能只调用Logger:

  

记录器。信息(msg,* args,** kwargs)

     

记录级别为INFO的消息   这个记录器。参数解释为debug()。

  

记录器。警告(msg,* args,** kwargs)

     

在此记录器上记录级别为WARNING的消息。参数&gt;解释为debug()。

所以相反,做:

log.info("Test info level logging...")

答案 1 :(得分:0)

log("Hello")

这是错误的。 正确是

log.info("Hello")

日志必须以日志记录级别打印,即info / error / warning