在單程序下日誌的處理邏輯:
# 設定1小時的切割間割
第1步: 生成info.log
第2步: 寫入1小時日誌
第3步: 1小時之後,判定info.log-2018-11-30-1檔案是否存在,如果存在則刪除,然麼重新命名info.log為info.log-2018-11-30-1
第4步: 重新生成info.log並將logger的檔案控制代碼指向新的info.log檔案
在2個程序下日誌的處理邏輯:
# 設定1小時的切割間割
第1步: 生成info.log
第2步: 寫入1小時日誌
第3步: 1小時之後,1號程序先判定info.log-2018-11-30-1檔案是否存在,如果存在則刪除,然麼重新命名info.log為info.log-2018-11-30-1
第4步: 此時可能2號程序還在向info.log檔案進行寫入,由於寫入流已經開啟,檔案控制代碼指向的是原info.log, 即現在的info.log-2018-11-30-1,所以2程序會向info.log-2018-11-30-1中寫入
第5步: 等到2號程序下次寫日誌時,發現到了執行重新命名操作的時間了,但此時info.log-2018-11-30-1已經存在,然後他會進行刪除操作,這樣就會導致info.log-2018-11-30-1已存在的日誌丟失
第6步: 2號程序執行刪除操作後,接下來便會執行將info.log重新命名為info.log-2018-11-30-1的操作,這時候就會導致1號進行繼續向info.log-2018-11-30-1寫入,這樣就導致了日誌錯亂
python 日誌檔案寫入的時候,加入檔案獨佔鎖
基於此方案,目前有兩個安裝包實現這個功能, 安裝任何乙個即可:
concurrent-log-handler
github上面一位大佬實現的,目前版本v0.9.20僅支援按檔案大小切割檔案
pyloghandlers
是我基於concurrent-log-handler
在保留核心功能的基本上做了一些改動,使其支援按大小、按日期切割檔案;
下面是pyloghandlers
乙個簡短的用法介紹, 更詳細的用法,可以檢視文件 pyloghandlers on github:
logging = ,
},'handlers': ,
'time':
},'loggers': ,
}}def write_log(tag):
import logging.config
logging.config.dictconfig(logging)
for i in range(0, 500):
# import time
# time.sleep(0.001)
logger.debug(f' process tag ')
if __name__ == '__main__':
from multiprocessing import process
p_count = 1
p_list =
for i in range(p_count):
for p in p_list:
p.start()
for p in p_list:
p.join()
Django多程序滾動日誌的問題
使用rotatingfilehandler控制日誌檔案的大小 settings.py logging 設定rotatingfilehandler的maxbytes與backupcount,這兩個引數預設是0。當兩個引數都不為0時,會執行rallover過程 log檔案大小接近maxbytes時,新建...
python多程序列印輸出 多程序列印日誌
多程序的日誌和多執行緒的日誌有一點區別。原因是 python 的 logging 包不支援程序共享鎖,所以來自不同的程序的日誌可能會混在一起。我們嘗試一下在上邊的例子裡加乙個基礎日誌。下邊是 import loggingimport multiprocessingfrom multiprocessi...
liunx下nginx日誌切割
bin bash 此指令碼用於自動分割nginx的日誌,包括access.log和error.log 每天00 00執行此指令碼 將前一天的access.log重新命名為access x xx xx.log格式,並重新開啟日誌檔案 nginx日誌檔案所在目錄 log path usr local n...