0

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

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

这是模块的样子:

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脚本,产生新进程等。当这些新进程导入 logger 时,它们还没有导入它,所以它们将重新生成CURRENT_TIME.

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

4

3 回答 3

1

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

于 2012-08-15T20:32:01.783 回答
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,环境变量的概念

于 2012-08-15T20:28:40.533 回答
0

当您第一次启动脚本时,将 starttime 写入 temp 目录中的文件。

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

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

您甚至可以让清理脚本从临时目录中删除开始时间。

于 2012-08-15T20:31:25.837 回答