【问题标题】:Python Logging different file on each turnPython每回合记录不同的文件
【发布时间】:2018-02-12 02:49:56
【问题描述】:

我正在使用 24/7 运行的 python 2.7 脚本,我希望在每次执行循环时由日志记录模块生成不同的日志文件。每个文件的时间戳都有文件名以避免混淆。

到目前为止,我得到了:

def main():

    while True:

        datetimenow = datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")

        logging.basicConfig(format='%(asctime)s %(levelname)-8s %(message)s',
                            datefmt='%a, %d %b %Y %H:%M:%S', filename="logs/" + datetimenow + '.log',
                            level=logging.INFO)
        logging.getLogger().addHandler(logging.StreamHandler())


        # ... start of action


    if __name__ == "__main__":

        main()

这会产生一个文件,当循环再次启动时,它不会关闭并打开一个新文件。

此外,控制台输出似乎是双重打印的,因为每行输出到控制台两次。

有解决这些问题的想法吗?

【问题讨论】:

  • Martijn Pieters 发布了一些关于关闭日志文件处理程序的内容:stackoverflow.com/a/15474586/1513933
  • 你到底想要什么?你想让它从原来的位置继续,还是你想在每个循环中都有一个新文件?因为您根据现在的日期时间给出finename!当然,每一秒你都会有一个新文件。
  • @Moher :我希望在每个循环上都有一个新文件来继续/启动新的日志记录序列

标签: python python-2.7 logging


【解决方案1】:

好的,我通过删除 basicConfig sn-p 并构建两个处理程序使其工作,一个在循环中用于具有不同时间戳的文件,一个在类中用于控制台。关键是在循环结束时删除处理程序,然后用不同的日期再次添加它。这是完整的示例:

import logging
import time
import datetime

logger = logging.getLogger('simple_example')
logger.setLevel(logging.INFO)

con = logging.StreamHandler()
con.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
con.setFormatter(formatter)
logger.addHandler(con)

def main():

a = 0

while True:

    datetimenow = datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")

    ch = logging.FileHandler("logs/" + datetimenow + '.log')
    ch.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
    ch.setFormatter(formatter)
    logger.addHandler(ch)        

    time.sleep(5)

    a += 1

    logger.warning("logging step "+ str(b))

    time.sleep(5)

    logger.removeHandler(ch)

if __name__ == "__main__":

    main()

Sleep(5) 用于测试目的,它不会走得太快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2013-07-16
    • 2016-11-23
    相关资源
    最近更新 更多