使用python 2.7.9在日志文件中设置消息格式
我是Python编程的初学者 我尝试使用日志模块将日志重定向到文件,但我面临以下问题: 在名为error.log的日志文件中,我有每个日志文件行中重复出现的级别名称和日期 有没有办法避免这个问题 我正在使用Python 2.7.9 下面是我的代码:使用python 2.7.9在日志文件中设置消息格式,python,Python,我是Python编程的初学者 我尝试使用日志模块将日志重定向到文件,但我面临以下问题: 在名为error.log的日志文件中,我有每个日志文件行中重复出现的级别名称和日期 有没有办法避免这个问题 我正在使用Python 2.7.9 下面是我的代码: # error.py # -*- coding: utf-8 -*- import logging import sys logging.basicConfig( level=logging.ERROR, format="%(leve
# error.py
# -*- coding: utf-8 -*-
import logging
import sys
logging.basicConfig(
level=logging.ERROR,
format="%(levelname)s - %(asctime)s - %(message)s",
filename="error.log",
filemode='w'
)
class StreamToLogger(object):
def __init__(self, logger, log_level=logging.DEBUG):
self.logger = logger
self.log_level = log_level
def write(self, text):
for line in text.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
stdout_logger = logging.getLogger('STDOUT')
sl = StreamToLogger(stdout_logger, logging.INFO)
sys.stdout = sl
stderr_logger = logging.getLogger('STDERR')
sl = StreamToLogger(stderr_logger, logging.ERROR)
sys.stderr = sl
#Voluntary error for display in the log
print message
运行此python脚本时,我得到以下文件:
# the error.log file
ERROR - 2015-05-10 17:24:40,726 - Traceback (most recent call last):
ERROR - 2015-05-10 17:24:40,726 - File "D:\error\error.py", line 27, in <module>
ERROR - 2015-05-10 17:24:40,726 - print message
ERROR - 2015-05-10 17:24:40,726 - NameError
ERROR - 2015-05-10 17:24:40,726 - :
ERROR - 2015-05-10 17:24:40,726 - name 'message' is not defined
有没有办法避免级别名称和日期的重复,以使我的错误消息更具可读性?由于您是递归的,在写操作中,您应该能够只为self.logger.logself.log\u level,line.rstrip设置第一次迭代 然后将其更改为self.logger.log、line.rstrip之类的内容 对于其余的值 这应该允许您只打印一次错误级别。格式部分:
logging.basicConfig(
level=logging.ERROR,
format="%(levelname)s - %(asctime)s - %(message)s",
filename="error.log",
filemode='w'
)
定义如何将所有内容打印到控制台。如果只保留%条消息,则可以消除错误级别和时间戳
如果您试图只保留一次错误级别和时间戳,即:删除所有重复项,恐怕没有现成的方法来使用日志模块。最后,感谢您的建议,我可以得到我想要的,即仅在错误文件的第一行中定义级别名称和日期 按照您的建议,我将格式变量的值更改为%messages,并格式化了循环中的第一行 我不认为这是最优雅的方式,但它就像我想要的那样工作 这是我的密码:
# error.py
# -*- coding: utf-8 -*-
import logging
from datetime import datetime
import sys
logging.basicConfig(
level=logging.ERROR,
format="%(message)s",
filename="error.log",
filemode='w'
)
class StreamToLogger(object):
def __init__(self, logger, log_level=logging.DEBUG):
self.logger = logger
self.log_level = log_level
def write(self, text):
textLines = text.splitlines()
for line in textLines:
if line.startswith("Traceback"):
self.logger.log(self.log_level, "%s - %s - %s" % (logging.getLevelName(self.log_level), datetime.now(), line.rstrip()))
else:
self.logger.log(self.log_level, line.rstrip())
stdout_logger = logging.getLogger('STDOUT')
sl = StreamToLogger(stdout_logger, logging.INFO)
sys.stdout = sl
stderr_logger = logging.getLogger('STDERR')
sl = StreamToLogger(stderr_logger, logging.ERROR)
sys.stderr = sl
#Voluntary error for display in the log
print message
我得到以下日志文件:
# error.log
ERROR - 2015-05-15 21:06:47.234000 - Traceback (most recent call last):
File "D:\error\error.py", line 32, in <module>
print message
NameError
:
name 'message' is not defined
可能尝试将您的格式变量更改为以下格式=%messagesAh好的,谢谢大家。我想我们可以用过滤器之类的方法来做。