我知道django可以登录到一个文件,但我想知道如何在diff时间打印到不同的文件.文件名如20150101.log 20150102.log.
两个问题:
LOGGING->filename配置实现吗? handlers?换句话说,如何使用django分割文件不是通过filesize而是通过datetime.
Noa*_*oah 12
TimedRotatingFileHandler
要根据日期或时间登录到不同的文件,可以使用logging.handlers.TimedRotatingFileHandler类.
将TimedRotatingFileHandler所有消息记录到具有您指定名称的文件.在指定的间隔过去之后,它会将当前文件旋转到具有给定名称的文件,并附加日期和时间.
如果您的文件名是myproject.log在每个间隔结束时,它将旋转该文件myproject.log.2015-01-01,然后继续记录当前消息myproject.log.
不幸的是,这个课程的表现并不像你想象的那么好.它不是根据实际日期和时间旋转,而是根据时间间隔旋转.
如果您选择的间隔是1天,并且您恰好在1月1日中午开始运行Django,它将不会在午夜轮换并将所有消息从1月1日放入名为的文件中myproject.log.2015-01-01.相反,它将在1月2日中午(即您开始后1天)的中午轮换.它会将所有消息轮换到名为的文件myproject.log.2015-01-02.因此,此文件将包含1月1日和2日的消息.
如果您希望类基于实际时间运行,那么覆盖该类并专门覆盖调用的方法将是相当简单的shouldRollover.
至少该类将为您提供每日间隔,以便您可以快速找到所需的日志文件.您只需要查看两个文件.
要在Django中进行设置,请执行以下操作:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': 'myproject.log',
'when': 'D', # this specifies the interval
'interval': 1, # defaults to 1, only necessary for other values
'backupCount': 10, # how many backup file to keep, 10 days
'formatter': 'verbose',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
},
'': {
'handlers': ['file'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
}
},
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5226 次 |
| 最近记录: |