2012-10-21 85 views
1

比方說,我有以下的配置日誌文件:Python記錄:記錄配置文件不斷變化的保存位置

[loggers] 
keys=root,seeker,event 

[handlers] 
keys=consoleHandler,seekerFileHandler,eventFileHandler 

[formatters] 
keys=consoleFormatter,logFormatter 

[logger_root] 
level=DEBUG 
handlers=consoleHandler,seekerFileHandler,eventFileHandler 

[logger_seeker] 
level=DEBUG 
handlers=consoleHandler,seekerFileHandler 
qualname=seeker 
propagate=0 

[logger_event] 
level=DEBUG 
handlers=consoleHandler,eventFileHandler 
qualname=event 
propagate=0 

[handler_consoleHandler] 
class=StreamHandler 
level=INFO 
formatter=consoleFormatter 
args=(sys.stdout,) 

[handler_seekerFileHandler] 
class=FileHandler 
level=DEBUG 
formatter=logFormatter 
args=('seeker.log','a') 

[handler_eventFileHandler] 
class=FileHandler 
level=DEBUG 
formatter=logFormatter 
args=('event.log','a') 

[formatter_consoleFormatter] 
format=%(asctime)s - thread:%(thread)d - %(name)s - %(levelname)s | %(message)s 
datefmt=%m/%d/%Y %X 

[formatter_logFormatter] 
format=%(asctime)s | %(message)s 
datefmt=%m/%d/%Y %X 

通常我會:

import logging 
from logging.config import fileConfig 
from os import getcwd 

fileConfig(''.join([getcwd(),'/logging.conf'])) 
event_logger = logging.getLogger("event") 
seeker_logger = logging.getLogger("seeker") 

來處理每個記錄。不過,我傾向於在兩個獨立的平臺上運行該軟件:Windows和Linux,因此如果每個平臺都將其保存在「常見」位置,它將會很好。我正在尋找的東西是這樣的:

from sys import platform 
if 'win' in platform: 
    #alter the save path to this location 
if 'linux' in platform: 
    #alter save path to this location 

但我不知道如何實現這與一個配置文件,任何想法?

+0

BTW,爲什麼不直接使用'fileConfig(「logging.conf」)'? – nneonneo

+1

我不認爲你可以用配置文件做聲明,所以要麼你有兩個,大多是類似的,每個平臺的配置文件,並選擇加載基於該平臺的其中之一,或者以後你猴子修補文件處理程序對象加載通用配置以設置正確的目標文件。 –

+0

... getcwd是當前目錄;真的沒有意義(你可以獲得零安全性)。 – nneonneo

回答

1

您有2個選項。

  1. 使用logging-linux.conf文件和文件logging-win.conf與型動物的路徑,並加載它們的。平臺在測試內部。

  2. 代替使用配置文件,將創建記錄器委託給您自己的模塊,並在創建FileHandler實例時進行平臺測試。

採用的解決方案將取決於您的代碼的複雜性。如果你正在建設一個圖書館,看看這個頁面:http://docs.python.org/howto/logging.html#configuring-logging-for-a-library

+0

嗯,所以沒有辦法混合2?要麼保存兩個配置文件,要麼通過代碼執行所有操作,這會讓我失去運行時間級別,從而改變配置文件的好處......哦,謝謝。 – user747944

+1

我不這麼認爲......我已經遇到類似的問題,從來沒有找到一個解決方案來正確地混合這兩種方法。 – Kaltezar