python logging 日志轮转文件不删除问题的解决方法
2021-04-15 09:28
标签:turn rmi odi The 过期 日志轮转 alt ack ecif 项目使用了 logging 的 TimedRotatingFileHandler : 参考 python logging 的官方文档: https://docs.python.org/2/library/logging.html 查看其 入门 实例,可以看到使用按时间轮转的相关内容: 粗看下,也看不出有什么不对的地方。 那就看下logging的代码,找到TimedRotatingFileHandler 相关的内容,其中删除过期日志的内容: logging/handlers.py 轮转删除的原理,是查找到日志目录下,匹配suffix后缀的文件,加入到删除列表,如果超过了指定的数目就加入到要删除的列表中,再看下匹配的原理: exMatch 是一个正则的匹配,格式是 - 分隔的时间,而我们自己设置了新的suffix没有 - 分隔: loghandle.suffix = ‘%Y%m%d‘ python logging 日志轮转文件不删除问题的解决方法 标签:turn rmi odi The 过期 日志轮转 alt ack ecif 原文地址:https://www.cnblogs.com/qiumingcheng/p/13332079.html
#!/user/bin/env python
# -*- coding: utf-8 -*-
import
logging
from
logging.handlers
import
TimedRotatingFileHandler
log
=
logging.getLogger()
file_name
=
"./test.log"
logformatter
=
logging.Formatter(
‘%(asctime)s [%(levelname)s]|%(message)s‘
)
loghandle
=
TimedRotatingFileHandler(file_name,
‘midnight‘
,
1
,
2
)
loghandle.setFormatter(logformatter)
loghandle.suffix
=
‘%Y%m%d‘
log.addHandler(loghandle)
log.setLevel(logging.DEBUG)
log.debug(
"init successful"
)
import
logging
# create logger
logger
=
logging.getLogger(
‘simple_example‘
)
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch
=
logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter
=
logging.Formatter(
‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘
)
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# ‘application‘ code
logger.debug(
‘debug message‘
)
def
getFilesToDelete(
self
):
"""
Determine the files to delete when rolling over.
More specific than the earlier method, which just used glob.glob().
"""
dirName, baseName
=
os.path.split(
self
.baseFilename)
fileNames
=
os.listdir(dirName)
result
=
[]
prefix
=
baseName
+
"."
plen
=
len
(prefix)
for
fileName
in
fileNames:
if
fileName[:plen]
=
=
prefix:
suffix
=
fileName[plen:]
if
self
.extMatch.match(suffix):
result.append(os.path.join(dirName, fileName))
result.sort()
if
len
(result)
self
.backupCount:
result
=
[]
else
:
result
=
result[:
len
(result)
-
self
.backupCount]
return
result
elif
self
.when
=
=
‘D‘
or
self
.when
=
=
‘MIDNIGHT‘
:
self
.interval
=
60
*
60
*
24
# one day
self
.suffix
=
"%Y-%m-%d"
self
.extMatch
=
r
"^\d{4}-\d{2}-\d{2}$"
这样就找不到要删除的文件,不会删除相关的日志。
文章标题:python logging 日志轮转文件不删除问题的解决方法
文章链接:http://soscw.com/index.php/essay/75962.html