将日志消息打印到控制台(或日志文件)时,会获得具有相同日期的日志消息。 但是消息之间的超时是两秒钟。 这是我的代码

folder = "logs"
log_name = {}.log
file_name = os.path.join(folder, log_name)

date_format = "%Y-%m-%d_%H:%M:%S"
name_format = "[%(asctime)s] [%(levelname)s] [%(filename)s:%(lineno)s] - %(message)s"

log = logging.getLogger('')
log.setLevel(logging.DEBUG)
format = logging.Formatter(name_format, datetime.now().strftime(date_format))

console_handler = logging.StreamHandler(sys.stderr)
file_handler = handlers.RotatingFileHandler(filename=datetime.now().strftime(file_name.format(date_format)),
                                            maxBytes=(1048576*5),
                                            backupCount=7)
console_handler.setFormatter(format)
file_handler.setFormatter(format)

log.addHandler(console_handler)
log.addHandler(file_handler)


from time import sleep
log.info("1")
sleep(2)
log.info("2")
sleep(2)
log.info("3")

输出如下:

[2017-07-08_17:20:51] [INFO] [logs.py:112] - 1
[2017-07-08_17:20:51] [INFO] [logs.py:114] - 2
[2017-07-08_17:20:51] [INFO] [logs.py:116] - 3

===============>>#1 票数:6 已采纳

看一下logging.Formatter(fmt=None, datefmt=None, style='%')的文档。 您需要传递的第二个参数是datefmt (在您的情况下为"%Y-%m-%d_%H:%M:%S" )。 记录器将为您执行fmt.strftime(...)

您正在传递以这种格式表示datetime.now()的字符串。 由于这是一个str (例如'2017-07-08_17:20:51' ),格式化程序不会抱怨,但始终会打印确切日期: '2017-07-08_17:20:51'.strftime(...)将结果为'2017-07-08_17:20:51'没有格式说明符可填写。

您应该做的是这样的:

fmt = logging.Formatter(name_format, date_format)
# instead of
# format = logging.Formatter(name_format, datetime.now().strftime(date_format))

(btw: format是内置的;将格式化程序重命名为fmt ,以使内置的内容不会被覆盖)。

  ask by Vadim Kovrizhkin translate from so

未解决问题?本站智能推荐: