我有一个 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/