導航:首頁 > 文件管理 > log配置文件詳解

log配置文件詳解

發布時間:2024-07-02 20:15:44

A. Spring Boot Logging 配置

Spring Boot 能夠使用Logback, Log4J2 , java util logging 作為日誌記錄工具。Spring Boot 默認使用Logback作為日誌記錄工具。日誌默認輸出到控制台但也能輸出到文件中。我們通過spring-boot-starter-logging 加入Logback依賴,其實只要我們加入任意的Spring Boot starter 都會默認引入spring-boot-starter-logging,因此 我們不需要分開加入他們。

logging.level.* : 作為package(包)的前綴來設置日誌級別。
logging.file : 配置日誌輸出的文件名,也可以配置文件名的絕對路徑。
logging.path : 配置日誌的路徑。如果沒有配置 logging.file ,Spring Boot 將默認使用spring.log作為文件名。
logging.pattern.console : 定義console中logging的樣式。
logging.pattern.file : 定義文件中日誌的樣式。
logging.pattern.level : 定義渲染不同級別日誌的格式。默認是%5p.
logging.exception-conversion-word : .定義當日誌發生異常時的轉換字
PID : 定義當前進程的ID

下面將討論在 application.properties , application.ym , Logback XML 中配置Logback以及在Spirng Boot 應用中使用Log4J2.

logging.level設置日誌級別。我們可以使用TARCE , DEBUG , INFO , WARN , ERROR , FATAL , OFF 。可以使用root級別和package級別來控制日誌的輸入級別。創建一個具有以下依賴關系的應用程序

使用 srcmain esourcesapplication.properties 配置日誌級別

使用 srcmain esourcesapplication.yml

Spring Boot 默認把日誌輸入到console,如果我們要把日誌輸入到文件中,需要配置logging.file 或者logging.path屬性性。logging.file屬性用來定義文件名。他不僅僅可以配置文件名,也可以路徑+文件名。

在這種情況下mylogfile.log將在根目錄中創建。我們也可以為為mylogfile.log分配一個路徑,如concretepage/mylogfile.log。這種情況下我們將在相對根目錄下創建concretepage/mylogfile.log。我們也可以為日誌文件配置絕對路徑。
application.yml 中配置

配置logging.path或者logging.path屬性將日誌輸出到文件夾中。logging.path屬性用來定義日誌文件路徑
application.properties 中配置logging.path屬性

將會相對根路徑下創建concretepage/logs/spring.log ,也可以配置絕對路徑

application.yml 配置

通過設置logging.patter.console屬性我們能改變輸出到console的日誌樣式。日誌樣式包括時間,日誌級別,線程名,日誌名以及消息。我們可以按我們的喜好改變日誌樣式。
application.properties

application.yml

改變文件中的日誌樣式我們需要設置logging.pattern.file屬性。首先通過logging.file或logging.path屬性,把日誌記錄到文件中。

通過logging.path屬性將在根目錄下創建concretepage/logs並默認使用spring.log作為文件名。logging.pattern.console是設置console的日誌樣式
application.yml

通過命令行改變日誌的輸出級別
Sping Boot 默認輸出ERROR , WARN , INFO 級別的日誌。我們可以通過命令行使能DEBUG ,TRACE級別的日誌輸出,效果是跟配置文件一樣的。想像我們有一個名為my-app.jar的可執行的JAR包我們可以在啟動應用是使能DEBUG級別日誌輸出。

在application.properties中配置

application.yml

相同的方式使能TRACE級別的日誌

application.properties

application.yml

在應用程序中記錄日誌
創建一個SLF4J的例子,首先獲得org.slf4j.Logger的實例。

在application.properties配置包com.concretepage日誌記錄級別

輸出

使用Logback XML 文件
Sping Boot中默認使用logback, 我們可以在application.properties或者application.yml中設置日誌級別。如果想使用XML配置Logback,我們需要在類路徑下創建logback-spring.xml文件
srcmain esourceslogback-spring.xml

使用自定義日誌:Log4J2
我們使用任何的starter,默認加入Logback 依賴spring-boot-starter-logging。為了使用Log4J2,我們首先要去除spring-boot-starter-logging並且引入spring-boot-starter-log4j2 依賴

現在我們可以在類路徑下創建並配置log4j2-spring.xml

原文: http://www.concretepage.com/spring-boot/spring-boot-logging-example

B. log4net配置文件解析

<log net>

<root>

<level value= ALL />

<appender ref ref= rollingFile />

</root>

<appender name= rollingFile type= log net Appender RollingFileAppender log net >

<param name= File value= log txt />

<param name= AppendToFile value= false />

<param name= RollingStyle value= Date />

<param name= DatePattern value= yyyy MM dd />

<param name= StaticLogFileName value= true />

<layout type= log net Layout PatternLayout log net >

<param name= ConversionPattern value= %d [%t] % p %c %m%n />

<param name= Header value= header />

<param name= Footer value= footer />

</layout>

</appender>

<appender name= consoleApp type= log net Appender ConsoleAppender log net >

<layout type= log net Layout PatternLayout log net >

<param name= ConversionPattern value= %d [%t] % p %c %m%n />

</layout>

</appender>

<logger name= Log NetTest LogTest >

<level value= DEBUG />

<appender ref ref= rollingFile />

<appender ref ref= coloredConsoleApp />

<appender ref ref= SystemEvent />

</logger>

</log net>

log net配置節的XSD層次如下

<log net>

<root><level /><appender ref ref= /></root>

<appender name= type= Appender的完全限定類名 >

<param name= value= />

<layout type= log net Layout PatternLayout log net >

<param name= value= />

</layout>

</appender>

<logger>

<level value= />

<appender ref ref= />

</logger>

log net是log net配置節的根標記

root標記定義一個根級別的記錄者 log net的記錄者採用層級組織的 每一個LOGGER(ROOT也是一個LOGGER 只不過 他是祖先而已 別的方面 跟其他LOGGER一樣) 都可以定義Level

level定義記錄的日誌級別 就是說 你要記錄哪個級別以上的日誌 級別由高往低依次是:

None

Fatal

ERROR

WARN

DEBUG

INFO

ALL

級別的定義要注意 如果你定義DEBUG 那麼低於DEBUG級別以下的信息 將不會記入日誌 啥意思呢?就是說 就算你在程序里 用()來寫入一個日誌信息 可是你在配置中指定level為DEBUG 由於INFO級別低於DEBUG 所以 不會被記入日誌 這樣的處理非常靈活

Logger還有一個配置就是appender ref了 ref是參照的意思 log net的架構非常有意思 可擴展性非常高非常值得借鑒 他分為四個要素:

logger

appender

layout

filter

logger是負責日誌的記錄者

appender提供記錄的介質

layout負責把記入的內容格式化

filter負責把內容進行篩選

可以說 整個過程就是一個日誌流水線 每個成員負責其中的一個環節

logger發出記錄信息 appender接到信息 根據內部的layout配置對記錄信息格式化 根據filter決定此信息是否被過濾掉 最後 將其序列化

因此 logger的appender ref就是定義說 LOGGER要找誰去將內容寫入磁碟 流或其他介質 因此 十分重要吧

既然是ref引用 那肯定要定義這個被引用的appender對象了呀

每個appender都代表了一個輸出介質

name屬性指定其名稱 type則是log net Appender命名空間的一個類的名稱 意思是 指定使用哪種介質

log net支持的appender類型有十幾種 最常用的有rollingFileAppender AdoNetAppender EventLogAppender FileAppender 分別把日誌記入文件 系統日誌和資料庫

除此之外 appender內的其他參數都用param標記 以key/value形式定義於其內

這里有個小提示 每一個appender log net並沒有在文檔中提出他們需要哪些參數 那麼 我們怎麼知道呢?

原來 這些param的名稱 你可以直接查對應的appender類的屬性名即可 例如 使用EventLogAppender時 通過查看類的屬性 我們知道其有

LogName ApplicationName屬性 那麼 意味著 你可以直接在這個APPENDER的param里加入以下內容:

<param name= LogName value= Application />

<param name= ApplicationName value= log netTest />

定義了appender的NAME及TYPE屬性 以及使用param為其指定參數後 一個appender就建立了 你可以使用他的名字在LOGGER的<appender ref中去 引用它 那麼 引用它的LOGGER在寫入日誌時 就是寫到了APPENDER中定義的介質中去了

一個LOGGER可以引用多個APPENDER 其結果是 同一個日誌 被同時記錄到多個介質中去 便如 同時發郵件 寫入系統日誌 發送到遠程主機 不過 雖然可以這樣做 但是還是要小心 因為 會對性能有一定的影響 除非你需要 否則 不要亂用此功能

另外 appender中可以定義可選的layout

layout的定義非常有必要 如果你不想將來看到你的日誌會感覺頭暈的話 雖然log net幫你寫入日誌 但是 日誌信息的格式卻是我們使用者自行定義的layout的type參數指定使用哪個類的定義來格式化 常用的有XmlLayout SimpleLayout PatternLayout 這個當然要根據你的需要 以及你要產生的格式來選啦 如果你要輸出成XML文檔格式 你肯定不能用simplelayout吧

layout使用param以KEY/VALUE形式定義其參數

各個Layout類使用的參數當然不一樣啦 具體的 你可以去看各個Layout類的屬性

其中 PatternLayout可以使用ConversionPattern參數來指定一個格式化字元串

以及可以指定一個Header參數 做為日誌開頭的字元串 Footer來指定結尾字元串

這里有一個小技巧 日誌中開頭和結尾總想產生回車符吧 雖然logger在寫入一條日誌會自動回車 可是Header和FOOTER卻不會 咋辦?用 嗎?(我從別人的BLOG上看到過)經實踐 會原樣定改日誌 根本不會轉換 其實 我們可以用XML實體呀 使用&# ;&# ;就可以在指定位置插入一個回車換行符了

最後 像log net的文檔中說的那樣 如果你不想你的日誌文件變得很大 使讀寫的性能下降的話 建議你還是分級管理日誌 把粒度變小點 也就是說 除了定義ROOT外 最後 對每一個模塊或每一個實體 依據用途 目的 定義各自的LOGGER配置 這樣的好處是日誌被分散了 日誌文件增長就沒那麼快了 每一個LOGGER的結構跟ROOT是一模一樣的 這里不再敘述了 像前面說的那樣 如果你相讓日誌產生層級關系 你可以跟他們的NAME屬性像C#中的namespace那樣命名就可以了

要說明的是 LOGGER的定義是非必須的 只是一種建議罷了 Log net的配置中 除了必須定義一個ROOT和一個APPENDER外 其他的都是可選的

lishixin/Article/program/net/201311/11448

C. python涔嬮厤緗鏃ュ織鐨勫嚑縐嶆柟寮


鏈綃囨枃絝犱富瑕佷粙緇嶄簡璇﹁Вpython涔嬮厤緗鏃ュ織鐨勫嚑縐嶆柟寮忥紝鐜板湪鍒嗕韓緇欏ぇ瀹訛紝涔熺粰澶у跺仛涓鍙傝冦備竴璧瘋繃鏉ョ湅鐪嬪惂
浣滀負寮鍙戣咃紝鎴戜滑鍙浠ラ氳繃浠ヤ笅3涓鏂瑰紡鏉ラ厤緗甽ogging:

1錛変嬌鐢≒ython浠g爜鏄懼紡鐨勫壋寤簂oggers, handlers鍜宖ormatters騫跺垎鍒璋冪敤瀹冧滑鐨勯厤緗鍑芥暟錛

2錛夊壋寤轟竴涓鏃ュ織閰嶇疆鏂囦歡錛岀劧鍚庝嬌鐢╢ileConfig()鍑芥暟鏉ヨ誨彇璇ユ枃浠剁殑鍐呭癸紱

3錛夊壋寤轟竴涓鍖呭惈閰嶇疆淇℃伅鐨刣ict錛岀劧鍚庢妸瀹冧紶閫掍釜dictConfig()鍑芥暟錛
闇瑕佽存槑鐨勬槸錛宭ogging.basicConfig()涔熷睘浜庣涓縐嶆柟寮忥紝瀹冨彧鏄瀵筶oggers, handlers鍜宖ormatters鐨勯厤緗鍑芥暟榪涜屼簡灝佽呫傚彟澶栵紝絎浜岀嶉厤緗鏂瑰紡鐩稿逛簬絎涓縐嶉厤緗鏂瑰紡鐨勪紭鐐瑰湪浜庯紝瀹冨皢閰嶇疆淇℃伅鍜屼唬鐮佽繘琛屼簡鍒嗙伙紝榪欎竴鏂歸潰闄嶄綆浜嗘棩蹇楃殑緇存姢鎴愭湰錛屽悓鏃惰繕浣垮緱闈炲紑鍙戜漢鍛樹篃鑳藉熷幓寰堝規槗鍦頒慨鏀規棩蹇楅厤緗銆
涓銆佷嬌鐢≒ython浠g爜瀹炵幇鏃ュ織閰嶇疆
浠g爜濡備笅錛

# 鍒涘緩涓涓鏃ュ織鍣╨ogger騫惰劇疆鍏舵棩蹇楃駭鍒涓篋EBUG
logger = logging.getLogger('simple_logger')
logger.setLevel(logging.DEBUG)
# 鍒涘緩涓涓嫻佸勭悊鍣╤andler騫惰劇疆鍏舵棩蹇楃駭鍒涓篋EBUG
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
# 鍒涘緩涓涓鏍煎紡鍣╢ormatter騫跺皢鍏舵坊鍔犲埌澶勭悊鍣╤andler
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
# 涓烘棩蹇楀櫒logger娣誨姞涓婇潰鍒涘緩鐨勫勭悊鍣╤andler
logger.addHandler(handler)
# 鏃ュ織杈撳嚭
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')榪愯岃緭鍑猴細

2017-05-15 11:30:50,955 - simple_logger - DEBUG - debug message
2017-05-15 11:30:50,955 - simple_logger - INFO - info message
2017-05-15 11:30:50,955 - simple_logger - WARNING - warn message
2017-05-15 11:30:50,955 - simple_logger - ERROR - error message
2017-05-15 11:30:50,955 - simple_logger - CRITICAL - critical message浜屻佷嬌鐢ㄩ厤緗鏂囦歡鍜宖ileConfig()鍑芥暟瀹炵幇鏃ュ織閰嶇疆
鐜板湪鎴戜滑閫氳繃閰嶇疆鏂囦歡鐨勬柟寮忔潵瀹炵幇涓庝笂闈㈠悓鏍風殑鍔熻兘錛

# 璇誨彇鏃ュ織閰嶇疆鏂囦歡鍐呭
logging.config.fileConfig('logging.conf')
# 鍒涘緩涓涓鏃ュ織鍣╨ogger
logger = logging.getLogger('simpleExample')
# 鏃ュ織杈撳嚭
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')閰嶇疆鏂囦歡logging.conf鍐呭瑰備笅錛

[loggers]
keys=root,simpleExample
[handlers]
keys=fileHandler,consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=fileHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter
[handler_fileHandler]
class=FileHandler
args=('logging.log', 'a')
level=ERROR
formatter=simpleFormatter
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=榪愯岃緭鍑猴細

2017-05-15 11:32:16,539 - simpleExample - DEBUG - debug message
2017-05-15 11:32:16,555 - simpleExample - INFO - info message
2017-05-15 11:32:16,555 - simpleExample - WARNING - warn message
2017-05-15 11:32:16,555 - simpleExample - ERROR - error message
2017-05-15 11:32:16,555 - simpleExample - CRITICAL - critical message1. 鍏充簬fileConfig()鍑芥暟鐨勮存槑錛
璇ュ嚱鏁板疄闄呬笂鏄瀵筩onfigparser妯″潡鐨勫皝瑁咃紝鍏充簬configparser妯″潡鐨勪粙緇嶈峰弬鑰<銆
鍑芥暟瀹氫箟錛
璇ュ嚱鏁板畾涔夊湪loging.config妯″潡涓嬶細 浠g爜濡備笅:

logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True)

鍙傛暟錛
fname錛氳〃紺洪厤緗鏂囦歡鐨勬枃浠跺悕鎴栨枃浠跺硅薄
defaults錛氭寚瀹氫紶緇機onfigParser鐨勯粯璁ゅ
disable_existing_loggers錛氳繖鏄涓涓甯冨皵鍨嬪礆紝榛樿ゅ間負True錛堜負浜嗗悜鍚庡吋瀹癸級琛ㄧず紱佺敤宸茬粡瀛樺湪鐨刲ogger錛岄櫎闈炲畠浠鎴栬呭畠浠鐨勭栧厛鏄庣『鐨勫嚭鐜板湪鏃ュ織閰嶇疆涓錛涘傛灉鍊間負False鍒欏瑰凡瀛樺湪鐨刲oggers淇濇寔鍚鍔ㄧ姸鎬併
2. 閰嶇疆鏂囦歡鏍煎紡璇存槑錛
涓婇潰鎻愬埌榪囷紝fileConfig()鍑芥暟鏄瀵笴onfigParser/configparser妯″潡鐨勫皝瑁咃紝涔熷氨鏄璇磃ileConfig()鍑芥暟鏄鍩轟簬ConfigParser/configparser妯″潡鏉ョ悊瑙f棩蹇楅厤緗鏂囦歡鐨勩傛崲鍙ヨ瘽璇達紝fileConfig()鍑芥暟鎵鑳界悊瑙g殑閰嶇疆鏂囦歡鍩虹鏍煎紡鏄涓嶤onfigParser/configparser妯″潡涓鑷寸殑錛屽彧鏄鍦ㄦゅ熀紜涓婂規枃浠朵腑鍖呭惈鐨剆ection鍜宱ption鍋氫簡涓涓嬭勫畾鍜岄檺鍒訛紝姣斿傦細
1錛夐厤緗鏂囦歡涓涓瀹氳佸寘鍚玪oggers銆乭andlers銆乫ormatters榪欎簺section錛屽畠浠閫氳繃keys榪欎釜option鏉ユ寚瀹氳ラ厤緗鏂囦歡涓宸茬粡瀹氫箟濂界殑loggers銆乭andlers鍜宖ormatters錛屽氫釜鍊間箣闂寸敤閫楀彿鍒嗛殧錛涘彟澶杔oggers榪欎釜section涓鐨刱eys涓瀹氳佸寘鍚玶oot榪欎釜鍊礆紱
2錛塴oggers銆乭andlers銆乫ormatters涓鎵鎸囧畾鐨勬棩蹇楀櫒銆佸勭悊鍣ㄥ拰鏍煎紡鍣ㄩ兘闇瑕佸湪涓嬮潰浠ュ崟鐙鐨剆ection榪涜屽畾涔夈俿eciton鐨勫懡鍚嶈勫垯涓篬logger_loggerName]銆乕formatter_formatterName]銆乕handler_handlerName]
3錛夊畾涔塴ogger鐨剆ection蹇呴』鎸囧畾level鍜宧andlers榪欎袱涓猳ption錛宭evel鐨勫彲鍙栧間負DEBUG銆両NFO銆乄ARNING銆丒RROR銆丆RITICAL銆丯OTSET錛屽叾涓璑OTSET琛ㄧず鎵鏈夌駭鍒鐨勬棩蹇楁秷鎮閮借佽板綍錛屽寘鎷鐢ㄦ埛瀹氫箟綰у埆錛沨andlers鐨勫兼槸浠ラ楀彿鍒嗛殧鐨刪andler鍚嶅瓧鍒楄〃錛岃繖閲屽嚭鐜扮殑handler蹇呴』鍑虹幇鍦╗handlers]榪欎釜section涓錛屽苟涓旂浉搴旂殑handler蹇呴』鍦ㄩ厤緗鏂囦歡涓鏈夊瑰簲鐨剆ection瀹氫箟錛
4錛夊逛簬闈瀝oot logger鏉ヨ達紝闄や簡level鍜宧andlers榪欎袱涓猳ption涔嬪栵紝榪橀渶瑕佷竴浜涢濆栫殑option錛屽叾涓璹ualname鏄蹇呴』鎻愪緵鐨刼ption錛屽畠琛ㄧず鍦╨ogger灞傜駭涓鐨勫悕瀛楋紝鍦ㄥ簲鐢ㄤ唬鐮佷腑閫氳繃榪欎釜鍚嶅瓧寰楀埌logger錛沺ropagate鏄鍙閫夐」錛屽叾榛樿ゆ槸涓1錛岃〃紺烘秷鎮灝嗕細浼犻掔粰楂樺眰嬈logger鐨刪andler錛岄氬父鎴戜滑闇瑕佹寚瀹氬叾鍊間負0錛岃繖涓鍙浠ョ湅涓嬩笅闈㈢殑渚嬪瓙錛涘彟澶栵紝瀵逛簬闈瀝oot logger鐨刲evel濡傛灉璁劇疆涓篘OTSET錛岀郴緇熷皢浼氭煡鎵鵑珮灞傛$殑logger鏉ュ喅瀹氭logger鐨勬湁鏁坙evel銆
5錛夊畾涔塰andler鐨剆ection涓蹇呴』鎸囧畾class鍜宎rgs榪欎袱涓猳ption錛宭evel鍜宖ormatter涓哄彲閫塷ption錛沜lass琛ㄧず鐢ㄤ簬鍒涘緩handler鐨勭被鍚嶏紝args琛ㄧず浼犻掔粰class鎵鎸囧畾鐨刪andler綾誨垵濮嬪寲鏂規硶鍙傛暟錛屽畠蹇呴』鏄涓涓鍏冪粍錛坱uple錛夌殑褰㈠紡錛屽嵆渚垮彧鏈変竴涓鍙傛暟鍊間篃闇瑕佹槸涓涓鍏冪粍鐨勫艦寮忥紱level涓巐ogger涓鐨刲evel涓鏍鳳紝鑰宖ormatter鎸囧畾鐨勬槸璇ュ勭悊鍣ㄦ墍浣跨敤鐨勬牸寮忓櫒錛岃繖閲屾寚瀹氱殑鏍煎紡鍣ㄥ悕縐板繀欏誨嚭鐜板湪formatters榪欎釜section涓錛屼笖鍦ㄩ厤緗鏂囦歡涓蹇呴』瑕佹湁榪欎釜formatter鐨剆ection瀹氫箟錛涘傛灉涓嶆寚瀹歠ormatter鍒欒handler灝嗕細浠ユ秷鎮鏈韜浣滀負鏃ュ織娑堟伅榪涜岃板綍錛岃屼笉娣誨姞棰濆栫殑鏃墮棿銆佹棩蹇楀櫒鍚嶇О絳変俊鎮錛
6錛夊畾涔塮ormatter鐨剆ectioin涓鐨刼ption閮芥槸鍙閫夌殑錛屽叾涓鍖呮嫭format鐢ㄤ簬鎸囧畾鏍煎紡瀛楃︿覆錛岄粯璁や負娑堟伅瀛楃︿覆鏈韜錛沝atefmt鐢ㄤ簬鎸囧畾asctime鐨勬椂闂存牸寮忥紝榛樿や負'%Y-%m-%d %H:%M:%S'錛沜lass鐢ㄤ簬鎸囧畾鏍煎紡鍣ㄧ被鍚嶏紝榛樿や負logging.Formatter錛
璇存槑錛
閰嶇疆鏂囦歡涓鐨刢lass鎸囧畾綾誨悕鏃訛紝璇ョ被鍚嶅彲浠ユ槸鐩稿逛簬logging妯″潡鐨勭浉瀵瑰礆紝濡傦細FileHandler銆乭andlers.TimeRotatingFileHandler錛涗篃鍙浠ユ槸涓涓緇濆硅礬寰勫礆紝閫氳繃鏅閫氱殑import鏈哄埗鏉ヨВ鏋愶紝濡傝嚜瀹氫箟鐨刪andler綾籱ypackage.mymole.MyHandler錛屼絾鏄痬ypackage闇瑕佸湪Python鍙鐢ㄧ殑瀵煎叆璺寰勪腑--sys.path銆
3. 瀵逛簬propagate灞炴х殑璇存槑
瀹炰緥1錛
鎴戜滑鎶妉ogging.conf涓璼impleExample榪欎釜handler瀹氫箟涓鐨刾ropagate灞炴у兼敼涓1錛屾垨鑰呭垹闄よ繖涓猳ption錛堥粯璁ゅ煎氨鏄1錛夛細

[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=1鐜板湪鏉ユ墽琛屽悓鏍風殑浠g爜錛

# 璇誨彇鏃ュ織閰嶇疆鏂囦歡鍐呭
logging.config.fileConfig('logging.conf')
# 鍒涘緩涓涓鏃ュ織鍣╨ogger
logger = logging.getLogger('simpleExample')
# 鏃ュ織杈撳嚭
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')鎴戜滑浼氬彂鐜幫紝闄や簡鍦ㄦ帶鍒跺彴鏈夎緭鍑轟俊鎮鏃跺欙紝鍦╨ogging.log鏂囦歡涓涔熸湁鍐呭硅緭鍑:

2017-05-15 16:06:25,366 - simpleExample - ERROR - error message
2017-05-15 16:06:25,367 - simpleExample - CRITICAL - critical message榪欒存槑simpleExample榪欎釜logger鍦ㄥ勭悊瀹屾棩蹇楄板綍鍚庯紝鎶婃棩蹇楄板綍浼犻掔粰浜嗕笂綰х殑root logger鍐嶆″仛澶勭悊錛屾墍鏈夋墠浼氭湁涓や釜鍦版柟閮芥湁鏃ュ織璁板綍鐨勮緭鍑恆傞氬父錛屾垜浠閮介渶瑕佹樉紺虹殑鎸囧畾propagate鐨勫間負0錛岄槻姝㈡棩蹇楄板綍鍚戜笂灞俵ogger浼犻掋
瀹炰緥2錛
鐜板湪錛屾垜浠璇曠潃鐢ㄤ竴涓娌℃湁鍦ㄩ厤緗鏂囦歡涓瀹氫箟鐨刲ogger鍚嶇О鏉ヨ幏鍙杔ogger錛

# 璇誨彇鏃ュ織閰嶇疆鏂囦歡鍐呭
logging.config.fileConfig('logging.conf')
# 鐢ㄤ竴涓娌℃湁鍦ㄩ厤緗鏂囦歡涓瀹氫箟鐨刲ogger鍚嶇О鏉ュ壋寤轟竴涓鏃ュ織鍣╨ogger
logger = logging.getLogger('simpleExample1')
# 鏃ュ織杈撳嚭
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')榪愯岀▼搴忓悗錛屾垜浠浼氬彂鐜版帶鍒跺彴娌℃湁浠諱綍杈撳嚭錛岃宭ogging.log鏂囦歡涓鍙堝氫簡涓よ岃緭鍑猴細

2017-05-15 16:13:16,810 - simpleExample1 - ERROR - error message
2017-05-15 16:13:16,810 - simpleExample1 - CRITICAL - critical message榪欐槸鍥犱負錛屽綋涓涓鏃ュ織鍣ㄦ病鏈夎璁劇疆浠諱綍澶勭悊鍣ㄦ槸錛岀郴緇熶細鍘繪煡鎵捐ユ棩蹇楀櫒鐨勪笂灞傛棩蹇楀櫒涓婃墍璁劇疆鐨勬棩蹇楀勭悊鍣ㄦ潵澶勭悊鏃ュ織璁板綍銆俿impleExample1鍦ㄩ厤緗鏂囦歡涓娌℃湁琚瀹氫箟錛屽洜姝logging.getLogger(simpleExample1)榪欒屼唬鐮佽繖鏄鑾峰彇浜嗕竴涓猯ogger瀹炰緥錛屽苟娌℃湁緇欏畠璁劇疆浠諱綍澶勭悊鍣錛屼絾鏄瀹冪殑涓婄駭鏃ュ織鍣--root logger鍦ㄩ厤緗鏂囦歡涓鏈夊畾涔変笖璁劇疆浜嗕竴涓狥ileHandler澶勭悊鍣錛宻impleExample1澶勭悊鍣ㄦ渶緇堥氳繃榪欎釜FileHandler澶勭悊鍣ㄥ皢鏃ュ織璁板綍杈撳嚭鍒發ogging.log鏂囦歡涓浜嗐
涓夈佷嬌鐢ㄥ瓧鍏擱厤緗淇℃伅鍜宒ictConfig()鍑芥暟瀹炵幇鏃ュ織閰嶇疆
Python 3.2涓寮曞叆鐨勪竴縐嶆柊鐨勯厤緗鏃ュ織璁板綍鐨勬柟娉--鐢ㄥ瓧鍏告潵淇濆瓨logging閰嶇疆淇℃伅銆傝繖鐩稿逛簬涓婇潰鎵璁茬殑鍩轟簬閰嶇疆鏂囦歡鏉ヤ繚瀛榣ogging閰嶇疆淇℃伅鐨勬柟寮忔潵璇達紝鍔熻兘鏇村姞寮哄ぇ錛屼篃鏇村姞鐏墊椿錛屽洜涓烘垜浠鍙鎶婂緢澶氱殑鏁版嵁杞鎹㈡垚瀛楀吀銆傛瘮濡傦紝鎴戜滑鍙浠ヤ嬌鐢↗SON鏍煎紡鐨勯厤緗鏂囦歡銆乊AML鏍煎紡鐨勯厤緗鏂囦歡錛岀劧鍚庡皢瀹冧滑濉鍏呭埌涓涓閰嶇疆瀛楀吀涓錛涙垨鑰咃紝鎴戜滑涔熷彲浠ョ敤Python浠g爜鏋勫緩榪欎釜閰嶇疆瀛楀吀錛屾垨鑰呴氳繃socket鎺ユ敹pickled搴忓垪鍖栧悗鐨勯厤緗淇℃伅銆傛諱箣錛屼綘鍙浠ヤ嬌鐢ㄤ綘鐨勫簲鐢ㄧ▼搴忓彲浠ユ搷浣滅殑浠諱綍鏂規硶鏉ユ瀯寤鴻繖涓閰嶇疆瀛楀吀銆
榪欎釜渚嬪瓙涓錛屾垜浠灝嗕嬌鐢╕AML鏍煎紡鏉ュ畬鎴愪笌涓婇潰鍚屾牱鐨勬棩蹇楅厤緗銆
棣栧厛闇瑕佸畨瑁匬yYAML妯″潡錛

pip install PyYAMLPython浠g爜錛

import logging
import logging.config
import yaml
with open('logging.yml', 'r') as f_conf:
dict_conf = yaml.load(f_conf)
logging.config.dictConfig(dict_conf)
logger = logging.getLogger('simpleExample')
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
logging.yml閰嶇疆鏂囦歡鐨勫唴瀹癸細
version: 1
formatters:
simple:
format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
stream: ext://sys.stdout
console_err:
class: logging.StreamHandler
level: ERROR
formatter: simple
stream: ext://sys.stderr
loggers:
simpleExample:
level: DEBUG
handlers: [console]
propagate: yes
root:
level: DEBUG
handlers: [console_err]杈撳嚭緇撴灉錛

2017-05-21 14:19:31,089 - simpleExample - DEBUG - debug message
2017-05-21 14:19:31,089 - simpleExample - INFO - info message
2017-05-21 14:19:31,089 - simpleExample - WARNING - warn message
2017-05-21 14:19:31,089 - simpleExample - ERROR - error message
2017-05-21 14:19:31,090 - simpleExample - CRITICAL - critical message1. 鍏充簬dictConfig()鍑芥暟鐨勮存槑錛
璇ュ嚱鏁板疄闄呬笂鏄瀵筩onfigparser妯″潡鐨勫皝瑁呫
鍑芥暟瀹氫箟錛
璇ュ嚱鏁板畾涔夊湪loging.config妯″潡涓嬶細

logging.config.dictConfig(config)璇ュ嚱鏁板彲浠ヤ粠涓涓瀛楀吀瀵硅薄涓鑾峰彇鏃ュ織閰嶇疆淇℃伅錛宑onfig鍙傛暟灝辨槸榪欎釜瀛楀吀瀵硅薄銆傚叧浜庤繖涓瀛楀吀瀵硅薄鐨勫唴瀹硅勫垯浼氬湪涓嬮潰榪涜屾弿榪般
2. 閰嶇疆瀛楀吀璇存槑
鏃犺烘槸涓婇潰鎻愬埌鐨勯厤緗鏂囦歡錛岃繕鏄榪欓噷鐨勯厤緗瀛楀吀錛屽畠浠閮借佹弿榪板嚭鏃ュ織閰嶇疆鎵闇瑕佸壋寤虹殑鍚勭嶅硅薄浠ュ強榪欎簺瀵硅薄涔嬮棿鐨勫叧鑱斿叧緋匯傛瘮濡傦紝鍙浠ュ厛鍒涘緩涓涓鍚嶉濅負鈥渟imple鈥濈殑鏍煎紡鍣╢ormatter錛涚劧鍚庡壋寤轟竴涓鍚嶄負鈥渃onsole鈥濈殑澶勭悊鍣╤andler錛屽苟鎸囧畾璇handler杈撳嚭鏃ュ織鎵浣跨敤鐨勬牸寮忓櫒涓"simple"錛涚劧鍚庡啀鍒涘緩涓涓鏃ュ織鍣╨ogger錛屽苟鎸囧畾瀹冩墍浣跨敤鐨勫勭悊鍣ㄤ負"console"銆
浼犻掔粰dictConfig()鍑芥暟鐨勫瓧鍏稿硅薄鍙鑳藉寘鍚涓嬮潰榪欎簺keys錛屽叾涓璿ersion鏄蹇呴』鎸囧畾鐨刱ey錛屽叾瀹僰ey閮芥槸鍙閫夐」錛


key鍚嶇О鎻忚堪version蹇呴夐」錛屽叾鍊兼槸涓涓鏁存暟鍊礆紝琛ㄧず閰嶇疆鏍煎紡鐨勭増鏈錛屽綋鍓嶅敮涓鍙鐢ㄧ殑鍊煎氨鏄1formatters鍙閫夐」錛屽叾鍊兼槸涓涓瀛楀吀瀵硅薄錛岃ュ瓧鍏稿硅薄姣忎釜鍏冪礌鐨刱ey涓鴻佸畾涔夌殑鏍煎紡鍣ㄥ悕縐幫紝value涓烘牸寮忓櫒鐨勯厤緗淇℃伅緇勬垚鐨刣ict錛屽俧ormat鍜宒atefmtfilters鍙閫夐」錛屽叾鍊兼槸涓涓瀛楀吀瀵硅薄錛岃ュ瓧鍏稿硅薄姣忎釜鍏冪礌鐨刱ey涓鴻佸畾涔夌殑榪囨護鍣ㄥ悕縐幫紝value涓鴻繃婊ゅ櫒鐨勯厤緗淇℃伅緇勬垚鐨刣ict錛屽俷amehandlers鍙閫夐」錛屽叾鍊兼槸涓涓瀛楀吀瀵硅薄錛岃ュ瓧鍏稿硅薄姣忎釜鍏冪礌鐨刱ey涓鴻佸畾涔夌殑澶勭悊鍣ㄥ悕縐幫紝value涓哄勭悊鍣ㄧ殑閰嶇疆淇℃伅緇勬垚鐨刣cit錛屽俢lass銆乴evel銆乫ormatter鍜宖ilters錛屽叾涓璫lass涓哄繀閫夐」錛屽叾瀹冧負鍙閫夐」錛涘叾浠栭厤緗淇℃伅灝嗕細浼犻掔粰class鎵鎸囧畾鐨勫勭悊鍣ㄧ被鐨勬瀯閫犲嚱鏁幫紝濡備笅闈㈢殑handlers瀹氫箟紺轟緥涓鐨剆tream銆乫ilename銆乵axBytes鍜宐ackupCount絳塴oggers鍙閫夐」錛屽叾鍊兼槸涓涓瀛楀吀瀵硅薄錛岃ュ瓧鍏稿硅薄姣忎釜鍏冪礌鐨刱ey涓鴻佸畾涔夌殑鏃ュ織鍣ㄥ悕縐幫紝value涓烘棩蹇楀櫒鐨勯厤緗淇℃伅緇勬垚鐨刣cit錛屽俵evel銆乭andlers銆乫ilters 鍜 propagate錛坹esroot鍙閫夐」錛岃繖鏄痳oot logger鐨勯厤緗淇℃伅錛屽叾鍊間篃鏄涓涓瀛楀吀瀵硅薄銆傞櫎闈炲湪瀹氫箟鍏跺畠logger鏃舵槑紜鎸囧畾propagate鍊間負no錛屽惁鍒檙oot logger瀹氫箟鐨刪andlers閮戒細琚浣滅敤鍒板叾瀹僱ogger涓奿ncremental鍙閫夐」錛岄粯璁ゅ間負False銆傝ラ夐」鐨勬剰涔夊湪浜庯紝濡傛灉榪欓噷瀹氫箟鐨勫硅薄宸茬粡瀛樺湪錛岄偅涔堣繖閲屽硅繖浜涘硅薄鐨勫畾涔夋槸鍚﹀簲鐢ㄥ埌宸插瓨鍦ㄧ殑瀵硅薄涓娿傚間負False琛ㄧず錛屽凡瀛樺湪鐨勫硅薄灝嗕細琚閲嶆柊瀹氫箟銆俤isable_

閱讀全文

與log配置文件詳解相關的資料

熱點內容
百度網盤種子文件賬號 瀏覽:468
有關網路安全的作文 瀏覽:345
win10怎麼模仿有滑鼠 瀏覽:168
傳統數據加密方法是什麼 瀏覽:145
蘋果4s停機無id密碼怎樣解鎖 瀏覽:631
linux桌面垃圾箱 瀏覽:187
無文件夾 瀏覽:401
大數據中文視頻 瀏覽:812
php刪除文件夾 瀏覽:888
flow3d安裝教程 瀏覽:673
json解析數據插件 瀏覽:37
編程速度很慢怎麼回事 瀏覽:53
文件管理怎麼找不到文件夾了 瀏覽:788
孢子win10崩潰 瀏覽:584
電視不支持的文件格式mp4 瀏覽:664
對被解釋變數數據樣本有什麼假定 瀏覽:937
xml轉化為csv文件格式 瀏覽:348
大數據培訓那家好 瀏覽:576
家庭組可以不設置密碼嗎 瀏覽:943
江蘇移動app是什麼 瀏覽:27

友情鏈接