- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请帮助解决来自多个进程的 python3 日志记录到同一个日志文件的问题。
我有 dameon 主脚本,它在后台运行,每 15 秒调用一些其他 python 脚本,并且每个 python 脚本都使用相同的 TimedRotatingFileHandler 属性编写,并且所有日志都写入相同的日志文件。
一切正常,除了日志轮换。
lib/
├── __init__.py
├── FIRST.py
└── SECOND.py
└── THIRD.py
main_daemon.py
主 python 守护程序文件看起来像
t1 = t2 = t3 = Thread()
my_thread = MYthreads(t1, t2, t3)
################# Daemon Class #################
class Daemon(Daemon):
def run(self):
while True:
my_thread.start_my_class()
time.sleep(15)
ProcessManager = Daemon('daemon.pid')
ProcessManager.start()
lib/__init__.py
文件看起来不错
class MYthreads:
def __init__(self, t1, t2, t3):
self.t1 = t1
self.t2 = t2
self.t3 = t3
def start_my_class(self):
for file in List_files(path1):
self.t1 = Thread(target=FIRSTprocess, args=(file,))
self.t1.start()
self.t1.join()
for file in List_files(path2):
self.t2 = Thread(target=SECONDprocess, args=(file,))
self.t2.start()
self.t2.join()
for file in List_files(path3):
self.t3 = Thread(target=THIRDprocess, args=(file,))
self.t3.start()
self.t3.join()
这里的目标是从 lib/目录中的单独 python 文件导入的函数。
logger = logging.getLogger('mylogger')
#TimedRoatingFile handler definition
Timed_formatter = logging.Formatter('%(message)s')
Timed_handler = logging.handlers.TimedRotatingFileHandler('my_log', 'midnight', 1, 90)
Timed_handler.setFormatter(Timed_formatter)
logger.addHandler(Timed_handler)
#syslog handler definition
if syslog_streaming and curr_os != 'Windows':
log_formatter = logging.Formatter('%(name)s: %(message)s')
Sys_handler = logging.handlers.SysLogHandler(address = '/dev/log')
Sys_handler.setFormatter(log_formatter)
logger.addHandler(Sys_handler)
logger.handlers = [logger.handlers[0], logger.handlers[1]]
else:
logger.handlers = [logger.handlers[0], ]
# Set lev to DEBUG, applied to both
logger.setLevel(logging.DEBUG)
所以,我在所有 python 文件中定义了相同的日志属性,并将它们写入同一个日志文件,并将所有这些函数导入
__init__.py
并通过 while 循环每 15 秒调用一次类。
-rw-r--r--. 1 usertony usertony 1097 Sep 7 01:15 my_log.2020-09-06
-rw-r--r--. 1 usertony usertony 1097 Sep 8 00:00 my_log.2020-09-07
-rw-r--r--. 1 usertony usertony 96 Sep 9 00:00 my_log.2020-09-08
最佳答案
问题
您的进程正在竞争写入同一文件,从而导致竞争条件,从而导致翻转期间出现问题。
解决方案
您需要在这些线程之外定义记录器:
https://docs.python.org/3/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes
笔记
我不建议用你的类覆盖 Daemon 类。如果继承是您的类的目标名称,则是上下文(即: FileLoggingDeamon
)。
引用
从多个进程记录到单个文件:https://docs.python.org/3/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes
https://stackoverflow.com/a/9993857/806876
关于 python 3 : timedrotatingfilehandler log rotation issue with same log file with multiple scripts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63844088/
所以,在阅读文档和几个 stackoverflow 问题并在 Python 3.4 中尝试后,我不明白。它什么时候旋转以及在什么条件下旋转? 有 2 个线程,它们永远不会停止。他们调用此代码(我知道记
我像这样设置TimedRotatingFileHandler: import logging as logging from logging.handlers import TimedRotating
我在 apache 环境中运行我的 python 应用程序并使用 timedRotatingFileHandler 进行记录。我以一种应该每天午夜轮换的方式设置记录器。我的所有进程都写入同一个记录器文
我正在尝试实现 python 日志记录处理程序 TimedRotatingFileHandler。 当它滚动到午夜时,它会以 YYYY-MM-DD 的形式附加当前日期。 LOGGING_MSG_FOR
我正在尝试使用 TimedRotatingFileHandler 实现 python 日志记录 我在日志文件名中添加文件扩展名时遇到问题 这是我的代码 Path(".\\Log").mkdir(par
我正在使用 TimedRotatingFileHandler创建我的日志。 我希望我的日志文件每分钟创建一次,最多保留 2 个日志文件并删除旧的。这是示例代码: import logging impo
我正在使用 logging 模块 python 3.4 来记录许多天的性能。我想让它轮换,以便每天创建并写入一个名称中包含日期的新日志文件。 logging 模块的 TimedRotatingFile
python 2.7:每次日志经历翻转事件(使用 RotatingFileHandler 的日志)时,都会生成一个“备份”日志。 例如: logFile = 'general.log' file_ha
日志包中的 TimedRotatingFileHandler 无法正常工作。我的程序源: from logging.handlers import TimedRotatingFileHandler i
我在日志记录指南 here 的帮助下写了这篇文章这段代码应该为每个“设备”写一行。它创建日志文件,但里面没有写入任何内容。 #!/usr/bin/env python from __future__
我正在尝试使用 TimedRotatingFileHandler 将简单的登录包含到我的应用程序中。但是,我将输出同时放入指定文件和标准错误中。我将问题简化为一个小例子: import logging
这是我的配置文件: [loggers] keys=root [handlers] keys=TimedRotatingFileHandler [formatters] keys=simpleForma
我希望启动 Python 程序的多个实例(进程),并且希望每个实例都写入自己的日志文件。 进程每天至少重新启动一次。 所以我得到了以下代码。 logHandler = TimedRotatingFil
我使用 TimedRotatingFileHandler 来记录 Django 日志并每天轮换,但是检查日志文件,奇怪的问题是昨天的日志被截断了,今天的日志记录很少,昨天的日志丢失了! Django
我希望 TimedRotatingFileHandler 创建 .log 文件,但它创建的文件没有扩展名。有什么方法可以设置处理程序来生成日志文件吗? 简而言之,我想要的是:file_name.201
我是 Python 和编程的新手,我正在尝试制作一个简单的日常记录器。我想使用 TimedRotatingFileHandler 因为它适合我的需要,尽管我不能更改后缀,这很重要。我需要我的日志才能使
我正在尝试使用 TimedRotatingFileHandler将每日日志保存在单独的日志文件中。轮换完美地按预期工作,但我不喜欢它的工作方式是文件的命名。 如果我将日志文件设置为 my_log_fi
我正在使用 django 1.3 的日志记录功能,并试图实现一个 timedrotatingfilehandler 来每小时轮换日志。记录器在每小时后成功轮换,但似乎在每个日志请求期间它都会截断文件。
更新:TimedRotatingFileHandler 在我使用 multiprocessing 时无法正常工作,我应该如何处理 multiprocessing 日志记录? 我如下编写了自己的 Log
我正在尝试使用带有 logging.config 文件的 TimedRotatingFileHandler 进行测试,没有那么复杂,但它应该每 10 秒滚动到一个新的日志文件中。 但是我得到以下信息
我是一名优秀的程序员,十分优秀!