Python 日志记录和旋转文件

标签 python logging

我有一个 python 程序正在写入由 Linux 的 logrotate 命令轮换的日志文件。发生这种情况时,我需要通知我的程序停止写入旧文件并开始写入新文件。我可以处理信号,但我如何告诉 python 写入新文件?

我是这样打开文件的:

logging.basicConfig(format='%(asctime)s:%(filename)s:%(levelname)s:%(message)s',filename=log_file, level=logging.INFO)

然后这样写:

logging.log(level,"%s" % (msg))

日志记录模块看起来非常强大,但也势不可挡。谢谢。

最佳答案

不要使用 logging.basicConfig,使用 WatchedFileHandler。以下是它的使用方法。

import time
import logging
import logging.handlers

def log_setup():
    log_handler = logging.handlers.WatchedFileHandler('my.log')
    formatter = logging.Formatter(
        '%(asctime)s program_name [%(process)d]: %(message)s',
        '%b %d %H:%M:%S')
    formatter.converter = time.gmtime  # if you want UTC time
    log_handler.setFormatter(formatter)
    logger = logging.getLogger()
    logger.addHandler(log_handler)
    logger.setLevel(logging.DEBUG)

log_setup()
logging.info('Hello, World!')
import os
os.rename('my.log', 'my.log-old')
logging.info('Hello, New World!')

关于Python 日志记录和旋转文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106795/

相关文章:

python - 我的 A* 寻路算法并不总是能得到最短路径

Python:SGMLParser 无法获取行号

python - 使用 MemoryHandler 和 FileHandler 手动设置 Python 日志记录

python - Numpy 运行时警告 : divide by zero encountered in log10

logging - 登录还是不登录?

python - 如何将Python程序中的数据间隔插入MySQL数据库

python - 如何遍历列表的索引?

python - 如何加快访问 pandas 数据框列中的字典列表?

c# - WinForms C# 中优雅的日志窗口

c++ - 从其他不相关的类中使用 C++ Log 类