python多程序 寫日誌問題

2021-09-12 04:08:59 字數 2384 閱讀 6686

在使用 timedrotatingfilehandler python日誌切分的時候,遇到錯誤:

os.rename(source, dest)

permissionerror:

[winerror 32

] 另乙個程式正在使用此檔案,程序無法訪問

**是單程序的,最初遇到這個錯誤比較疑惑,最後發現是在**中

import django

django.setup(

)

引用了django,因此同時有乙個django程序存在。

解決方法

這樣修改後,最終實現效果與之前有所不同,不會有類似logger.log這樣的命名格式,所有的log檔名都加上了時間戳,可以通過suffix控制切割的頻率。

class

safefilehandler

(filehandler)

:def

__init__

(self, filename, mode=

"a", encoding=

none

, delay=

0, suffix=

"%y-%m-%d_%h"):

if codecs is

none

: encoding =

none

current_time = time.strftime(suffix, time.localtime())

filehandler.__init__(self, filename +

"."+ current_time, mode, encoding, delay)

self.filename = os.fspath(filename)

self.mode = mode

self.encoding = encoding

self.suffix = suffix

self.suffix_time = current_time

defemit

(self, record)

:try

:if self.check_base_filename():

self.build_base_filename(

) filehandler.emit(self, record)

except

(keyboardinterrupt, systemexit)

:raise

except

: self.handleerror(record)

defcheck_base_filename

(self)

: time_tuple = time.localtime(

)if self.suffix_time != time.strftime(self.suffix, time_tuple)

ornot os.path.exists(

os.path.abspath(self.filename)

+'.'

+ self.suffix_time)

:return

1else

:return

0def

build_base_filename

(self)

:if self.stream:

self.stream.close(

) self.stream =

none

# if self.suffix_time != "":

# index = self.basefilename.find("." + self.suffix_time)

# if index == -1:

# index = self.basefilename.rfind(".")

# self.basefilename = self.basefilename[:index]

current_time_tuple = time.localtime(

) self.suffix_time = time.strftime(self.suffix, current_time_tuple)

self.basefilename = os.path.abspath(self.filename)

+"."

+ self.suffix_time

ifnot self.delay:

self.stream =

open

(self.basefilename, self.mode, encoding=self.encoding)

python多程序列印輸出 多程序列印日誌

多程序的日誌和多執行緒的日誌有一點區別。原因是 python 的 logging 包不支援程序共享鎖,所以來自不同的程序的日誌可能會混在一起。我們嘗試一下在上邊的例子裡加乙個基礎日誌。下邊是 import loggingimport multiprocessingfrom multiprocessi...

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...

python專案 多程序日誌分割

前文說到uwsgi日誌分割,那個是屬於uwsgi專案的執行日誌,我們如果需要列印一些資訊的話,如果全放在裡面由於太多且多執行緒多程序會導致日誌錯亂,所以我決定再增加乙個程式執行日誌模組,然後踩坑開始了。def setup log log name 建立logger物件。傳入logger名字 logg...