使用相同的日志目录作为脚本的持续时间

时间:2012-08-15 20:09:57

标签: python logging

我的计划是每当运行一个脚本时,占用当前时间并为我生成的日志文件创建一个文件夹。脚本的每个步骤都会在此文件夹中生成一个新的日志文件。

问题是,我正在试图弄清楚如何在脚本的持续时间内使用相同的文件夹。现在发生的事情是每次创建记录器时它都会获得当前时间,每次都会创建一个新文件夹。

这是模块的样子:

logger.py

...

CURRENT_TIME = # get current time
LOG_FOLDER = "logs/%s/" % CURRENT_TIME

...

def get_logger(name):
    # Create a log file with the given name in the LOG_FOLDER

每当我import logger.py重新计算CURRENT_TIME时,会发生什么。我认为避免这种情况的方法是from logger.py import *为所有模块执行一次代码,使它们具有相同的日志文件夹。

问题是脚本调用其他python脚本,生成新进程等。当这些新进程导入记录器时,他们尚未导入它,因此它们将重新生成CURRENT_TIME

那么解决这个问题的好方法是什么?我想到的一个解决方案是让记录器使用一个名为temp的常量文件夹,并在主脚本完成后将其重命名为当前时间(或将当前时间存储在脚本的开头)。我真的不喜欢这个解决方案,就好像有异常或错误并且脚本死了,文件夹将保留temp当我希望它在那种情况下是脚本的时间,所以我知道它何时失败

3 个答案:

答案 0 :(得分:1)

经典的解决方案是使用一个环境变量,它将在您的进程和所有子进程之间共享。

演示(另存为x.py,警告:会一遍又一遍地调用自己):

import os
import random
from subprocess import call

def get_logger():
    return os.environ.setdefault("LOG_DIR", logger_name())

def logger_name(): return "log" + str(random.random())

print "Process " + str(os.getpid()) + " uses " + get_logger()

call(["python",  "x.py"])

参考文献:os.environ docs,the concept环境变量

答案 1 :(得分:1)

更好的方法是在应用程序启动时实现RotatingFileHandler并执行doRollover()

答案 2 :(得分:0)

首次启动脚本时,将starttime写入temp目录中的文件。

当记录器运行时,它会在temp目录中的文件中查找时间值。

如果您的脚本崩溃,那么当您再次启动主脚本时,它将替换之前的值,因此此次运行的日志将位于正确的位置。

您甚至可以使用清理脚本从临时目录中删除启动时间。