当前位置: 首页 > 知识库问答 >
问题:

在Python中记录和旋转stdout和stderr

堵睿范
2023-03-14

我是一个Linux新手,我正在运行以下Linux命令:

nohup python my_script.py > my.out 2> my.err

一切都如预期的那样运作;python(2.7)print语句的所有输出都记录在名为my.out的文件中。

唯一的问题是,在运行了几天之后,My.out文件变得非常大。有没有一种方法(在Linux shell级别)可以创建一个新的“my.out”,比方说每天一次,在文件名中带有时间戳?

共有1个答案

沈弘文
2023-03-14

您应该在脚本中使用日志模块:

import logging.handlers

LOG_FILE_NAME = '/var/log/my_script.log'
LOGGING_LEVEL = logging.INFO

formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
handler = logging.handlers.RotatingFileHandler(LOG_FILE_NAME, mode='a', maxBytes=5000000, backupCount=5)
handler.setFormatter(formatter)
log = logging.getLogger("my_script")
log.addHandler(handler)
log.setLevel(LOGGING_LEVEL)

在本例中,我们配置一个5MB的日志文件循环,保留5个文件。因此,每次日志文件达到5MB时,脚本都会创建一个新的日志文件并存档旧的日志文件(最多5个文件)。

下面是在日志文件中记录数据的代码示例:

def do_something():
    # do stuff here
    log.info("Something has been done")
python my_script.py

所有内容都将被记录在您想要的文件中,并自动进行日志循环。

如果您更喜欢基于时间的循环,请参阅TimedRotingFileHandler

https://docs.python.org/2/library/logging.handlers.html#timedrotatingfilehandler

 类似资料:
  • 问题内容: 我想记录stdout和stderr来记录文件,这就是我尝试过的方法。 然后,我想将控制台输出记录在文件中。如 我能做什么? 问题答案: 你提到的不是来自flask的记录器的日志消息中,来自 的记录,你还需要你的处理程序添加到该记录器实例手段,使其工作,如: 如果你查看werkzeug如何初始化其记录器,则将看到只有在尚未设置日志记录的情况下,它才会添加默认处理程序。这意味着,如果你在w

  • 我的grails应用程序中有一个配置错误,导致我的附加程序将输出发送到错误的地方,或者根本不发送。似乎有许多关于重复日志记录的问题,但我无法对我的情况应用任何答案。 下面是我的日志配置片段: 当我的程序运行时,输出将出现在、和中。直接发送到stdout的输出(绕过log4j)出现在catalina.out中 如果我设置 那么任何文件appender都不会被记录,但是stdout仍然会进入catal

  • 我怎么做?从主管手册上看不清楚。 我还会考虑一个不同的工具,而不是Supervisor。它的缺点之一是它是用python编写的,这确实会使docker容器变得臃肿。如果你有一个解决方案,那么有没有一个更优化的工具可以更好地使用Docker?

  • 因此,您希望(分别)记录进程或子进程的stdout和stderr,而不会使输出与您在终端中看到的不同,如果您没有记录任何内容。 看起来很简单不是吗?不幸的是,似乎不可能为这个问题编写一个通用的解决方案,在任何给定的过程中都有效。。。 管道重定向是一种分离stdout和stderr的方法,允许您单独记录它们。不幸的是,如果将标准输出/错误更改为管道,则进程可能会检测到管道不是tty(因为它没有宽度/

  • 问题内容: 我想使用PySide创建一个简单的应用程序,仅用于从python日志记录中输出。 我想知道: 如何重定向stdout写入QTextEdit? 如何编写logging.Handler记录到QTextEdit? 谢谢 问题答案: 这是从PyQt邮件列表复制粘贴的,但应该适用于PySide 这应该做您想要的。 用法示例:

  • 问题内容: 我有一个SCN节点,已将其转换为所需的旋转和角度。 现在,我想在新的X轴上无限旋转它,但是我似乎无法使其旋转360度,只是稍微移动了一点。 请注意,我从先前的问题中找到了旋转代码,它可以按预期工作,但是如果我想在转换后的节点上旋转,则不会。 编辑:转换代码: 问题答案: 回答您的评论,也可能回答您的问题。一旦安装了.dae文件,就可以按照以下示例访问节点: 如果需要查找这些节点的名称,