python中用logging打日志到文件,同时python调用的脚本(/命令)也会往相同的日志文件里写日志,如果
logging的打开文件方式是'w',那么脚本写的日志会被覆盖掉。用'a'的方式,就不会覆盖。
'w'配合handler的flush也是会被覆盖的。
怀疑:'w'的写入方式每次记录了当前它自己已写文件的位置,从此位置开始往后写。'a'的写入方式从文件最后的位置往后写。
-
#!/usr/bin/python
-
# -*- coding:utf8 -*-
-
-
import logging
-
import commands
-
-
# 创建一个logger
-
logger = logging.getLogger('mylogger')
-
logger.setLevel(logging.DEBUG)
-
# 创建一个handler,用于写入日志文件
-
fh = logging.FileHandler('z.log','a')
-
fh.setLevel(logging.DEBUG)
-
# 再创建一个handler,用于输出到控制台
-
ch = logging.StreamHandler()
-
ch.setLevel(logging.DEBUG)
-
# 定义handler的输出格式
-
formatter = logging.Formatter('[%(asctime)s] %(levelname)s %(message)s', '%Y-%m-%d %H:%M:%S',)
-
fh.setFormatter(formatter)
-
ch.setFormatter(formatter)
-
# 给logger添加handler
-
logger.addHandler(fh)
-
logger.addHandler(ch)
-
-
def ERR(msg, *args, **kwargs):
-
logger.error(msg,*args,**kwargs)
-
#fh.flush()
-
-
cmd='>./z.log'
-
commands.getstatusoutput(cmd)
-
-
ERR("1st line")
-
-
-
cmd='echo "[`date +\"%F %T\"`] INFO 2nd line">>./z.log'
-
commands.getstatusoutput(cmd)
-
cmd='echo "[`date +\"%F %T\"`] INFO 3rd line">>./z.log'
-
commands.getstatusoutput(cmd)
-
-
ERR("4th line")
-
cmd='echo "[`date +\"%F %T\"`] ==================== end =================">>./z.log'
-
commands.getstatusoutput(cmd)
由于脚本要求每次重写日志,只好先调用cmd清空日志文件,然后在用'a'方式打开,然后写日志。
阅读(6275) | 评论(0) | 转发(0) |