首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除日志文件并再次写入日志文件?

如何清除日志文件并再次写入日志文件?
EN

Stack Overflow用户
提问于 2012-09-17 06:12:03
回答 2查看 5.6K关注 0票数 7

我以这种方式创建日志文件:

代码语言:javascript
复制
    global logger
    logger = logging.getLogger("plus_dig_cname")
    logger.setLevel(logging.DEBUG)

    fh = logging.FileHandler( fdoc_log + "/plus_dig_cname.log" )

    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)

    logger.addHandler(fh)

当plus_dig_cname.log的大小大于300 by时,我使用一个shell脚本来处理它,主要进程是:

代码语言:javascript
复制
 mv $LOG_DIR/$1 $LOG_DIR/$1.bk
 [ $? -ne 0 ] && return 1
 touch $LOG_DIR/$1
 [ $? -ne 0 ] && return 1
 chmod 666 $LOG_DIR/$1
 [ $? -ne 0 ] && return 1

换个新的就行了。

问题是记录器无法在plus_dig_cname.log文件中提取任何内容。日志无法工作。

也许它可以通过以下方式解决:

代码语言:javascript
复制
with open( "plus_dig_cname.log", "w" ):
               pass

这种方式可以通过Python获得一个新的日志文件。但我想通过Bash获得新的日志文件。

那么,为什么在"mv触摸chmod“之后日志不能工作呢?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-17 06:16:58

使用RotatingFileHandler为您处理这个问题。

例如:

代码语言:javascript
复制
MAX_SIZE = 300 * 1024 * 1024
LOG_PATH = fdoc_log + "/plus_dig_cname.log"
fh = logging.handlers.RotatingFileHandler(LOG_PATH, maxBytes=MAX_SIZE, backupCount=5)

这将创建5个备份,每个备份300 of。

票数 6
EN

Stack Overflow用户

发布于 2012-09-17 06:43:38

创建FileHandler()或第一次写入该文件时将打开该文件。如果你移动文件,它就不见了。

您可以像@sberry建议的那样使用logging.handlers.RotatingFileHandler来使用Python旋转文件。

如果您在外部旋转日志文件(例如,使用对数旋转 ),那么您可以通知您的脚本该文件已经消失,例如,通过重新启动它或在旋转后的步骤中发送一个信号。

如果您使用inotify之类的内容来检测更改,您的脚本可以自动重新打开文件。比较tail -ftail -F是如何工作的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12453934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档