如果 python 中没有有效的解析输出,如何避免创建空记录器文件?

Jam*_* Xu 3 python python-3.x

我有一个 python 脚本来运行日志解析,它会定期扫描磁盘上的一些日志文件并尝试解析它们。但是,如果文件不可解析或没有数据,我的代码应该退出进行解析。问题是即使没有有效数据,我的脚本也会生成空日志文件。

即:-rw-r--r-- 1 个用户 userid 0 5 月 28 日 08:10 parse.py_20190528_08_10_03.log

我想这可能是因为当我的脚本启动时记录器已经初始化。我想知道是否有其他方法可以通过设置来避免这种情况?我尝试检查几个地方,但不知道如何检查。

这是我的脚本中的导入记录器:

import logger
logger = logging.getLogger('upgrade.py')
formatter=logging.Formatter("%(asctime)s - %(levelname)-8s %(message)s")
log_filename = '{}/{}_{}.log'.format(os.getcwd(),os.path.basename(sys.argv[0]),time.strftime("%Y%m%d_%H_%M_%S"))
fh = logging.FileHandler(log_filename)
fh.setLevel(logging.INFO)
fh.setFormatter(formatter)
logger.addHandler(fh)
Run Code Online (Sandbox Code Playgroud)

在我的解析函数之后,我使用下面的方法来确保它在没有有效数据的情况下不会转储数据。

   main()
     ......parsing....
    if len(outputs) != 0:
        logger.info(outputs)
     .......
     .... output filtering.....
    if len(out_list) == 0:
        exit(0)
     .....
Run Code Online (Sandbox Code Playgroud)

但是,这仍然不能阻止它在我的目录中创建 0 kb 文件。我在 crontab 中触发这个工具,它定期运行,生成大量此类文件,这很烦人且不好检查。我知道我还可以使用一些外部观察程序脚本来清除这些文件,但这不是一个明智的行为。

rda*_*das 6

您可以通过将FileHandler 的delay参数设置为来实现此目的:True

fh = logging.FileHandler(log_filename, delay=True)
Run Code Online (Sandbox Code Playgroud)

来自文档: https://docs.python.org/3/library/logging.handlers.html#logging.FileHandler

如果delay为真,则文件打开将推迟到第一次调用emit()。