簡體   English   中英

Python日志記錄:

[英]Python logging:

在Linux上運行一個python龍卷風程序。 最近,我發現了一個錯誤(可能不是)。 某些導入操作記錄將記錄到名為“ dagger.log”的文件中。

由於logging.handler.RotatingFileHandler的原因,當日志文件的長度接近maxBytes時,系統將連續創建新文件,其路徑名與基礎文件相同,但擴展名將附加“ .1”,“。2”等。它。 例如,在backupCount為8且基本文件名為“ app.log”的情況下,您將獲得“ dagger.log”,“ dagger.log.1”,“ dagger.log.2”,...到“ dagger.log.8”。

但是我在Linux上找到了該日志文件,圖片

dagger.log。[1-8]dagger.log於1月4日13:11創建, dagger.log。[1-8]於1月4日13:31進行了最后修改。 異常 由於文件dagger.log未達到最大大小, 因此不應創建dagger.log。[1-8] 而且,每個日志文件都不同。 他們根本沒有相同的記錄。

很長一段時間讓我感到困惑,我無法解決。 有人可以幫我嗎? 原諒我糟糕的英語。 我不知道你能理解我的問題嗎?

您是否正在運行多個進程(使用tornado.process.fork_processes(8)tornado.httpserver.HTTPServer.start(8) ?使用多個進程進行日志記錄可能會很棘手。分叉的進程可能會開始共享同一日志文件,然后在現在該輪換了,每個進程將獨立輪換,創建8個新文件。

解決方案是在啟動子進程之后才配置日志記錄,並為每個進程指定自己的日志文件名(或者,如grepe建議的那樣,只需登錄到stdout / stderr並讓一些外部進程處理文件和循環) 。 我建議為此使用外部進程管理器和負載平衡器,但是,如果您仍然想從Tornado應用程序中派生子進程,它將看起來像這樣(從HTTPServer初始化的“高級多進程”變體開始):

sockets = tornado.netutil.bind_sockets(8888)
task_id = tornado.process.fork_processes(0)
configure_logging('dagger%d.log' % task_id)
server = HTTPServer(app)
server.add_sockets(sockets)
IOLoop.current().start()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM