python日志记录不打印日期时间和其他格式值

时间:2013-09-03 13:56:08

标签: python exception logging formatting

我正在尝试使用python日志记录模块为我的程序创建RotatingFileHandler。我的日志处理程序将输出记录到文件:/var/log/pdmd.log,基本功能似乎工作并根据需要记录输出。

但是,我正在尝试使用以下格式格式化我的日志字符串:

"%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)s"

但是只记录了异常的message部分。以下是我设置记录器的代码:

#class variable declared at the beginning of the class declaration
log = logging.getLogger("PdmImportDaemon")

def logSetup(self):
    FORMAT = "%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)s"
    logging.basicConfig(format=FORMAT)

    #logging.basicConfig(level=logging.DEBUG)
    self.log.setLevel(logging.DEBUG) #by setting our logger to the DEBUG level (lowest level) we will include all other levels by default
    #setup the rotating file handler to automatically increment the log file name when the max size is reached
    self.log.addHandler( logging.handlers.RotatingFileHandler('/var/log/pdmd.log', mode='a', maxBytes=50000, backupCount=5) )

现在,当我运行一个方法并使用以下代码将程序输出到日志时:

 def dirIterate( self ):
    try:
        raise Exception( "this is my exception, trying some cool output stuff here!")               
    except Exception, e:
        self.log.error( e )
        raise e

pdmd.log文件中的输出只是异常文本,没有别的。出于某种原因,格式不受尊重;我期待:

 ERROR 2013-09-03 06:53:18,416 dirIterate 89 this is my exception, trying some cool output stuff here!

关于为什么我在logging.basicConfig中设置的格式没有被尊重的任何想法?

1 个答案:

答案 0 :(得分:3)

您还必须将格式添加到处理程序。

当您运行basicConfig()时,您正在为root记录器配置新的处理程序。
在这种情况下,您的自定义处理程序没有格式化。

替换

self.log.addHandler( logging.handlers.RotatingFileHandler('/var/log/pdmd.log', mode='a', maxBytes=50000, backupCount=5) )

使用:

rothnd = logging.handlers.RotatingFileHandler('/var/log/pdmd.log', mode='a', maxBytes=50000, backupCount=5)
rothnd.setFormatter(logging.Formatter(FORMAT))
self.log.addHandler(rothnd)