Chinaunix首页 | 论坛 | 博客
  • 博客访问: 441164
  • 博文数量: 126
  • 博客积分: 35
  • 博客等级: 民兵
  • 技术积分: 1262
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 16:39
文章分类

全部博文(126)

文章存档

2017年(2)

2016年(20)

2015年(64)

2014年(24)

2013年(16)

我的朋友

分类: Python/Ruby

2015-09-01 09:45:24

python中用logging打日志到文件,同时python调用的脚本(/命令)也会往相同的日志文件里写日志,如果logging的打开文件方式是'w',那么脚本写的日志会被覆盖掉。用'a'的方式,就不会覆盖。'w'配合handler的flush也是会被覆盖的。
怀疑:'w'的写入方式每次记录了当前它自己已写文件的位置,从此位置开始往后写。'a'的写入方式从文件最后的位置往后写。

  1. #!/usr/bin/python
  2. # -*- coding:utf8 -*-

  3. import logging
  4. import commands

  5. # 创建一个logger
  6. logger = logging.getLogger('mylogger')
  7. logger.setLevel(logging.DEBUG)
  8. # 创建一个handler,用于写入日志文件
  9. fh = logging.FileHandler('z.log','a')
  10. fh.setLevel(logging.DEBUG)
  11. # 再创建一个handler,用于输出到控制台
  12. ch = logging.StreamHandler()
  13. ch.setLevel(logging.DEBUG)
  14. # 定义handler的输出格式
  15. formatter = logging.Formatter('[%(asctime)s] %(levelname)s %(message)s', '%Y-%m-%d %H:%M:%S',)
  16. fh.setFormatter(formatter)
  17. ch.setFormatter(formatter)
  18. # 给logger添加handler
  19. logger.addHandler(fh)
  20. logger.addHandler(ch)

  21. def ERR(msg, *args, **kwargs):
  22.     logger.error(msg,*args,**kwargs)
  23.     #fh.flush()

  24. cmd='>./z.log'
  25. commands.getstatusoutput(cmd)

  26. ERR("1st line")


  27. cmd='echo "[`date +\"%F %T\"`] INFO 2nd line">>./z.log'
  28. commands.getstatusoutput(cmd)
  29. cmd='echo "[`date +\"%F %T\"`] INFO 3rd line">>./z.log'
  30. commands.getstatusoutput(cmd)

  31. ERR("4th line")
  32. cmd='echo "[`date +\"%F %T\"`] ==================== end =================">>./z.log'
  33. commands.getstatusoutput(cmd)

由于脚本要求每次重写日志,只好先调用cmd清空日志文件,然后在用'a'方式打开,然后写日志。

阅读(6275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~