【问题标题】:multiple python scripts write to one log file contains the date and time creation多个python脚本写入一个日志文件包含创建日期和时间
【发布时间】:2020-10-18 09:32:42
【问题描述】:
  1. 我想运行多个 python 脚本(假设它们都是 start 来自名为main.py) 的主脚本,它将写入一个日志 文件包含日期和时间创建,另外,我需要 logger 要写入控制台和文件。 python 2

    我尝试了很多不同的方法都没有成功,

    例子:

    main.py :一个接一个地运行脚本python1.pypython2.py,并且 三个 python 脚本将写入同一个日志文件 名称中的日期和时间,并且日志显示在控制台上 跑步时。

  2. 另外,这样的事情可以通过 python 脚本来完成吗 这些文件有哪些区别?例如第 4 个名为 log_to_one_file.py 的文件?

如果有人知道如何实现 - 我会很高兴知道...

【问题讨论】:

  • 你在使用 Python logging 模块吗?你应该!阅读文档并告诉我们究竟是什么不起作用。
  • 分享main的代码,展示你如何使用其他py模块

标签: python logging


【解决方案1】:

来自docs

多次调用 logging.getLogger('someLogger') 会返回对同一记录器对象的引用。这不仅在同一个模块内是正确的,而且跨模块也是如此,只要它在同一个 Python 解释器进程中。对同一个对象的引用是正确的;

【讨论】:

  • 谢谢,会考虑如何使用您的建议重新订购我的记录器,将更新... :)
【解决方案2】:

这听起来像是一个家庭作业,假设不存在现成的 Python 模块。

在这种情况下,最好检查 python file operations 并创建一个函数,该函数接收日志内容和日志文件路径作为参数,该函数在添加日期和时间前缀后将内容附加到该文件。然后您可以在名为log_to_one_file.py 的同一文件夹中创建一个文件,将函数放在那里,然后使用from log_to_one_file import function 将其导入您需要记录的文件中

如果需要更多的插件解决方案,更高级的答案是您可以覆盖默认的 sys.STDOUT 变量并像这样附加一个文件流送器:

import sys
import sys

class Logger(object):
    def __init__(self, path):
        self.terminal = sys.stdout
        self.log = open(path, "a")

    def write(self, message):
        self.terminal.write(message)
        self.log.write(message)  

    def flush(self):
        pass    

sys.stdout = Logger(path)

在上述解决方案中,您可以在Logger 类的write 方法中修改带有日期和时间前缀的消息。 然后,在这段代码运行之后,每当您在程序中调用print 时,它都会使用您设置的格式自动写入文件并登录到您的控制台。

如果您想在更有限的环境中应用上述解决方案,您可以阅读 Python 上下文管理器

【讨论】:

  • 希望这将是一个家庭作业...而不是从朋友那里复制粘贴比尝试解决它更好:) 我尝试的第二个 - 但它不会登录到控制台,只是登录到文件...
  • 我很高兴能帮上忙!如果我能够充分回答您的问题,请考虑投票或接受作为最佳答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
相关资源
最近更新 更多