当我将它们打印到控制台(或日志文件)时,我得到具有相同日期的日志消息.但是消息之间的超时是两秒钟.这是我的代码
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")
Run Code Online (Sandbox Code Playgroud)
这是输出:
[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
Run Code Online (Sandbox Code Playgroud)
看看文档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))
Run Code Online (Sandbox Code Playgroud)
(顺便说一句:format是一个内置的;重命名你的格式化程序,以便fmt不覆盖内置).
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |