我以这种方式创建日志文件:
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脚本来处理它,主要进程是:
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文件中提取任何内容。日志无法工作。
也许它可以通过以下方式解决:
with open( "plus_dig_cname.log", "w" ):
pass这种方式可以通过Python获得一个新的日志文件。但我想通过Bash获得新的日志文件。
那么,为什么在"mv触摸chmod“之后日志不能工作呢?
谢谢
发布于 2012-09-17 06:16:58
使用RotatingFileHandler为您处理这个问题。
例如:
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。
发布于 2012-09-17 06:43:38
创建FileHandler()或第一次写入该文件时将打开该文件。如果你移动文件,它就不见了。
您可以像@sberry建议的那样使用logging.handlers.RotatingFileHandler来使用Python旋转文件。
如果您在外部旋转日志文件(例如,使用对数旋转 ),那么您可以通知您的脚本该文件已经消失,例如,通过重新启动它或在旋转后的步骤中发送一个信号。
如果您使用inotify之类的内容来检测更改,您的脚本可以自动重新打开文件。比较tail -f和tail -F是如何工作的。
https://stackoverflow.com/questions/12453934
复制相似问题