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

标签 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)

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

   main()
     ......parsing....
    if len(outputs) != 0:
        logger.info(outputs)
     .......
     .... output filtering.....
    if len(out_list) == 0:
        exit(0)
     .....

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

最佳答案

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

fh = logging.FileHandler(log_filename, delay=True)

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

If delay is true, then file opening is deferred until the first call to emit().

关于python - 如果 python 中没有有效的解析输出,如何避免创建空记录器文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56346226/

相关文章:

python - 在字符串 python 中查找未知模式

python - 为什么这个嵌套列表理解会产生错误?

python - 如何将unicode下标与字符串格式结合起来

python - 对列表中的 Python 字典对象进行排序

python-3.x - 如何使用scapy像wireshark一样抓取流量?

python - 为什么我的 python 脚本(导入 docker-py 包(下面链接))给出错误而不是运行我的 docker 容器?

python - 字典到日期时间

python - Snorkel:我可以在数据集中使用不同的特征来生成标签函数 VS 训练分类器吗?

python - 如何设置字体大小或标签大小以适合所有设备

Python:搜索两个文件中的共同值