初识orcl 发表于 2014-05-04 15:41

logging模块疑问

       python的logging模块是不是多个程序同时调用模块的时候会有问题啊,
我现在遇到一个问题,就是2个程序同时执行,在程序走到日志定义模块时就报错了。其他人有遇到这个问题的么,python版本是2.7.

timespace 发表于 2014-05-04 16:05

两个程序有交互吗?logging是很通用的,两个程序的logging是独立的,要出问题也是程序BUG,比如两个进程写同一个文件等等

初识orcl 发表于 2014-05-04 16:08

稍后您在帮忙看一下,我在写测试程序,模拟报错的程序,晚些补上。谢谢哦回复 2# timespace


   

初识orcl 发表于 2014-05-04 17:27

#!/usr/bin/python
#coding=utf-8
import logging
import sys
import os

logpath='/home/infor/test/'
logFile=logpath+sys.argv
cmd = sys.argv
if os.path.exists(logFile)==True:
      os.remove(logFile)
print logFile
os.system('''echo '123'>%sss.log'''%logpath)
logger = logging.getLogger()
file = logging.FileHandler(logFile)
logger.addHandler(file)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
logger.setLevel(logging.NOTSET)
file.setFormatter(formatter)
logger.info('%s文件生成测试'%cmd)


我的程序就是类似这个形式,现在遇到的问题就是程序跑了一半出错了,根据日志模块打印的日志没有生成,os.system的日志有对应的命令。
回复 2# timespace


   

timespace 发表于 2014-05-04 17:55

回复 4# 初识orcl
无法重现你的问题。把logpath改为‘./’,执行:$ python2.7 test.py tmp.log
./tmp.log
$ more tmp.log
2014-05-04 17:51:25,723 INFO tmp.log文件生成测试
$ more ss.log
123

初识orcl 发表于 2014-05-04 18:10

我不是特别懂python,大大,是这样的问题假如您执行这个程序,同时跑3个,参数分别为a.log,b.log,c.log然后并发执行,就可能出现其中2个跑了,并且生成了对应的日志文件(例如:a,c跑了),b的没有跑成功,就是b.log没有生成。我这个程序出这个问题也是随机的,不是每次执行都执行,我现在定位问题是logging模块,今天刚想明白,可以在logging模块加上try except来验证猜想,等在出现问题,看看异常处理部分来证实.回复 5# timespace


   

timespace 发表于 2014-05-04 21:25

回复 6# 初识orcl
可能是某个地方有race condition,当重现问题时,就接近真实原因了。


   

q1208c 发表于 2014-05-05 06:54

os.system('''echo '123'>%sss.log'''%logpath)如果你没动过这一行, 那当并发的时候, 这个写可能会有问题.试着换一下这里看看.

初识orcl 发表于 2014-05-05 09:16

恩,这个是我的问题,单纯的写一个测试程序没注意这一点,真实程序不是这样的。没有%ss类似这种。回复 8# q1208c


   

初识orcl 发表于 2014-05-05 09:17

大哥,你起得好早啊回复 8# q1208c


   
页: [1] 2
查看完整版本: logging模块疑问