python logging:多个处理程序如何写入单个动态日志文件

时间:2014-01-06 18:14:05

标签: python logging

对于python项目,我有一个带有多个文件处理程序的python日志配置文件。它对静态日志文件名起作用。

如果是动态文件,则会因OSError: [Errno 17] File exists: '/var/tmp/log_2011_01_01_1310'

而失败

由于第一个句柄创建了dir,然后控制移动到第二个模块,其中handler2尝试再次创建dir和文件并失败,如果我保持处理程序相同,它将如何获取先前的信息创建了日志文件信息?

目的是: handler1将创建日志文件,该日志文件将用于记录多个模块中使用的休息处理程序。

args = ('/var/tmp/log.file','a') 

为了使它动态,我使用了自定义FileHandler的解决方案。

[handler1]
level=DEBUG
formatter=client
class: logger.myFileHandler
args = ('/var/tmp','client.log','a')

[handler2]
level=DEBUG
formatter=server
class: logger.myFileHandler
args = ('/var/tmp','client.log','a')

#custom file handler class

class myFileHandler(logging.FileHandler):
    def __init__(self,path,fileName,mode):
        time = '2011_01_01_1310'  ##Will generate dynamically once in execution.  
        path = path+"/log_"+time
        os.mkdir(path)
        super(myFileHandler,self).__init__(path+"/"+fileName,mode)

1 个答案:

答案 0 :(得分:0)

您无法使用os.mkdir创建现有目录。但是你用相同的参数调用它两次。

在调用os.mkdir之前检查目录是否已存在,或者捕获异常并忽略它:

try:
    os.mkdir(path)
except OSError as e:
    if e.errno != 17:
        raise

除了打开文件两次以附加到它之外,这很好。