对于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)
答案 0 :(得分:0)
您无法使用os.mkdir
创建现有目录。但是你用相同的参数调用它两次。
在调用os.mkdir
之前检查目录是否已存在,或者捕获异常并忽略它:
try:
os.mkdir(path)
except OSError as e:
if e.errno != 17:
raise
除了打开文件两次以附加到它之外,这很好。