我正在尝试使用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
中设置的格式没有被尊重的任何想法?
答案 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)