[英]How two process can log in single file with Python? / Logging to a single file from multiple processes
[英]Python RotatingFileHandler is logging also to archived file - how to log multiple processes to single file
這是我的日志配置:
[loggers]
keys=root,lan,publan
[handlers]
keys=nullHandler,consoleHandler,fileHandler,pubfileHandler
[formatters]
keys=full,simple
[logger_lan]
level=INFO
handlers=fileHandler
qualname=lan
[logger_publan]
level=INFO
handlers=pubfileHandler
qualname=publan
[logger_root]
level=ERROR
handlers=nullHandler
[handler_fileHandler]
class=handlers.RotatingFileHandler
formatter=full
level=INFO
args=('/home/userx/lan/LAN_runtime_and_exception.log', 'a', 1000, 5)
[handler_pubfileHandler]
class=handlers.RotatingFileHandler
formatter=simple
level=INFO
args=('/home/userx/lan/LAN.log', 'a', 100000000, 1)
[handler_nullHandler]
class=NullHandler
level=DEBUG
[handler_consoleHandler]
class=StreamHandler
level=ERROR
formatter=full
args=(sys.stdout,)
[formatter_full]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
[formatter_simple]
format=%(asctime)s - %(message)s
datefmt=%d-%m-%Y %H:%M:%S
我有大約 10 個不同的文件,每個文件都有完全相同的日志記錄設置:
import logging
import logging.config
#logging stuff
os.umask(0o002)
logging.config.fileConfig('logging.conf', disable_existing_loggers=False)
logger = logging.getLogger('lan')
#calling logger
logger.error("some error occured")
到目前為止一切順利,現在問題來了。 重新啟動我的應用程序后,所有日志記錄都正確發送到最后一個文件LAN_runtime_and_exception.log
,但后來某個時間 - 幾個小時,幾天,我不知道確切的觸發器和時間,我觀察到倒數第二個文件LAN_runtime_and_exception.log.1
正在增加來自具有日志記錄集的這 10 個文件之一的一些記錄。 我無法找到為什么會這樣。 我的目標是始終只增加最新的文件。
-rw-rw-r-- 1 root loggroup 17209 Dec 14 08:49 LAN_runtime_and_exception.log
this file is also incrementing >>>> -rw-rw-r-- 1 userx loggroup 1035 Dec 13 14:42 LAN_runtime_and_exception.log.1
-rw-rw---- 1 userx loggroup 99974 Dec 13 00:38 LAN_runtime_and_exception.log.2
-rw-rw-r-- 1 root loggroup 8550 Dec 6 07:48 LAN_runtime_and_exception.log.3
-rw-rw-r-- 1 userx loggroup 99947 Dec 5 12:45 LAN_runtime_and_exception.log.4
-rw-rw-r-- 1 root loggroup 1246 Nov 28 21:37 LAN_runtime_and_exception.log.5
有任何想法嗎?
我最終以一種非常優雅的解決方案結束了恕我直言,並解決了使用syslogHandler
而不是RotatingFileHandler 在單個文件中記錄多個進程並在 linux 級別上記錄的問題。 我做了一些測試,syslogHandler 的行為一直很好。
這里的基本概念和代碼片段:
logging.conf(INI 格式)
[handler_syslogHandler]
class=handlers.SysLogHandler
formatter=full
level=INFO
args=(('localhost',handlers.SYSLOG_UDP_PORT),handlers.SysLogHandler.LOG_LOCAL7) <<- modify here as you wish
/etc/rsyslog.conf
#Custom Logging
local7.* /var/log/mylog/mylog.log
/etc/logrotate.d/mylog
/var/log/mylog/*.log
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog rotate > /dev/null
endscript
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.