閱讀Logback文件筆記--Logback的Appender配置
- 首先,判斷guard是否為真,如果為真,立刻退出,如果不為真,將在下一步被賦值為true,這樣做是為了防止,在呼叫append()方法之前可能採用相同的appender輸出其他的日誌,導致重複遞迴。
private
- 然後,判斷started是否為true,如果為false,則輸出警告資訊並返回。在完成配置之後,呼叫start()方法檢測相關屬性配置,符合規範無異常則使該appender啟用。如果appender有任何異常,將會在logback內部狀態管理中記錄警告資訊。
- 經過與之繫結的filter過濾器的一系列篩選,日誌事件event可以被拒絕返回,也可以被接收,進入下一步。
- 呼叫append()
- 設定guard=false,允許後來的doAppend()函式呼叫。
OutputStreamAppender
將日誌事件附加到java.io.OutputStream中。這個類作為ConsoleAppender,FileAppender的父類,其中FileAppender又是
RollingFileAppender的父類。但一般來說,都不能通過例項化這個Appender。下面是OutputStream的類關係圖
如同它的名字一樣,這個Appender將日誌輸出到console,更準確的說是System.out 或者System.err。
它包含的引數如下:
Property Name | Type | Description |
---|---|---|
encoder |
Determines the manner in which an event is written to the underlying OutputStreamAppender . Encoders are described in a dedicated
chapter. |
|
target |
String |
指定輸出目標。可選值:System.out 或 System.err。預設值:System.out |
withJansi |
boolean |
是否支援ANSI color codes(類似linux中的shell指令碼的輸出字串顏色控制程式碼)。預設為false。如果設定為true。例如: [31m 代表將前景色設定成紅色。在windows中,需要提供"org.fusesource.jansi:jansi:1.9",而在linux,mac os x中預設支援。 |
Property Name | Type | Description |
---|---|---|
append |
boolean |
是否以追加方式輸出。預設為true。 |
encoder |
See OutputStreamAppender properties. |
|
file |
String |
指定檔名。注意在windows當中,反斜槓 \ 需要轉義,或直接使用 / 也可以。例如 c:/temp/test.logor 或 c:\\temp\\test.log 都可以。沒有預設值,如果上層目錄不存在,FileAppender會自動建立。 |
prudent |
boolean |
是否工作在謹慎模式下。在謹慎模式下,FileAppender將會安全寫入日誌到指定檔案,即時在不同的虛擬機器jvm中有另一個相同的FileAppender例項。 預設值:fales 設定為true,意味著append會被自動設定成true prudent依賴於檔案排它鎖。實驗表明,使用檔案鎖,會增加3倍的日誌寫入消耗。比如說,當prudent模式為off,寫入一條日誌到檔案只要10毫秒,但是prudent為真,則會接近30毫秒。 prudent 模式實際上是將I/O請求序列化,因此在I/O數量較大,比如說100次/s或更多的時候,帶來的延遲也會顯而易見,所以應該避免。在networked file system(遠端檔案系統)中,這種消耗將會更大,可能導致死鎖。 |
- key是該屬性的名字,作為variable的name
- datePattern需要符合SimpleDateFormat中的約定
- timeReference可以引用其他變數的值
timeReference="contextBirth"/> ... </configuration> RollingFileAppender繼承自FileAppender,提供日誌目標檔案自動切換的功能。例如可以用日期作為日誌分割的條件。 RollingFileAppender有兩個重要屬性,RollingPolicy負責怎麼切換日誌,TriggeringPolicy負責何時切換。為了使RollingFileAppender起作用,這兩個屬性必須設定,但是如果RollingPolicy的實現類同樣實現了TriggeringPolicy介面,則也可以只設置RollingPolicy這個屬性。 下面是它的引數:
Property Name | Type | Description |
---|---|---|
file |
String |
指定檔名。注意在windows當中,反斜槓 \ 需要轉義,或直接使用 / 也可以。例如 c:/temp/test.logor 或 c:\\temp\\test.log 都可以。沒有預設值,如果上層目錄不存在,FileAppender會自動建立。 |
append |
boolean |
是否以追加方式輸出。預設為true。 |
encoder |
See OutputStreamAppender properties. |
|
rollingPolicy |
RollingPolicy |
當發生日誌切換時,RollingFileAppender的切換行為。例如日誌檔名的修改 |
triggeringPolicy |
TriggeringPolicy |
決定什麼時候發生日誌切換,例如日期,日誌檔案大小到達一定值 |
prudent |
boolean |
|
import ch.qos.logback.core.FileAppender; import ch.qos.logback.core.spi.LifeCycle; public interface RollingPolicy extends LifeCycle { /*rollover方法完成當前日誌檔案歸檔的工作 */ public void rollover() throws RolloverFailure; /*getActiveFileName方法負責計算新的日誌檔名*/ public String getActiveFileName(); /*getCompressionMode方法負責壓縮模式的工作*/
public CompressionMode getCompressionMode(); /*設定父appender*/
public void setParent(FileAppender appender); } RollingPolicy有幾個常見的實現類: TimeBasedRollingPolicy
TimeBasedRollingPolicy也許是最受歡迎的日誌滾動策略。它的滾動策略是基於時間的,例如根據天數,月份。
TimeBasedRollingPolicy繼承了RollingPolicy和TriggeringPolicy介面。
它包含一個必需的屬性:fileNamePattern 以及若干個可選屬性。
Property Name | Type | Description |
---|---|---|
fileNamePattern |
String |
這個必需的屬性,決定了日誌滾動時,歸檔日誌的命名策略。它由檔名,以及一個%d轉移符組成。%d{}花括號中需要包含符合SimpleDateFormat約定的時間格式,如果未指定,直接是%d,則預設相當於%d{yyyy-MM-dd}。 需要注意的是,在RollingPolicy節點的父節點appender節點中,<file>節點的值可以顯示宣告,或忽略。如果宣告file屬性,你可以達到分離當前有效日誌檔案以及歸檔日誌檔案的目的。設定成之後,當前有效日誌檔案的名稱永遠都是file屬性指定的值,當發生日誌滾動時,再根據fileNamePattern的值更改存檔日誌的名稱,然後建立一個新的有效日誌檔案,名為file屬性指定的值。如果不指定,則當前有效日誌檔名根據fileNamePattern變更。 同樣需要注意的是,在%d{}中,不管是“/”還是“\”都被認為是檔案分隔符。 多個%d轉移符的情況: fileNamePaatern的值允許包含多個%d的情況,但是隻有一個%d作為主要的日誌滾動週期的參考值。其餘非主要的%d需要包含一個"aux"的引數。 例如: <fileNamePattern>/var/log/%d{yyyy/MM, aux}/myapplication.%d{yyyy-MM-dd}.log</fileNamePattern> 根據年月劃分目錄,再將相應月份按日期天數命名的歸檔日誌存放在一起同一個月份資料夾當中。該屬性值決定在每天0點的時候發生日誌切換。 時區問題: 你可以將日期轉換成相應時區的時間。 例如 aFolder/test.%d{yyyy-MM-dd-HH, UTC}.log //世界協調時間 aFolder/test.%d{yyyy-MM-dd-HH, GMT}.log //格林尼治時間 |
maxHistory | int | 可選引數,宣告歸檔日誌最大保留時間。如果你是基於月份的日誌滾動,則當maxHisory為6時,說明會保留6個月的日誌。大於6個月的就會被刪除。日誌所存在的目錄也會被合適的刪除掉。 |
totalSizeCap | int | 可選引數,宣告歸檔日誌的最大儲存量。當超過這個值,最老的歸檔日誌檔案也會被刪除。 |
cleanHistoryOnStart | boolean | 可選引數,預設為false。 如果設定為true,則當appender啟動時,會刪除所有歸檔日誌檔案。 |
fileNamePattern | Rollover schedule | Example |
---|---|---|
/wombat/foo.%d | 每天午夜滾動日誌,未指定,預設為%d{yyyy-MM-dd} | file屬性未設定的情況下:在2016年7月17日,日誌會輸出到/wombat/foo.2016-07-17日誌檔案中,在午夜24點,當前有效日誌檔案會被轉換成/wombat/foo.2016-07-18 file屬性設定為/wombat/foo.txt的情況下:在2016年7月17日,日誌會輸出到/wombat/foo.txt的日誌檔案中,在午夜24點,日誌檔案被歸檔,並重命名為/wombat/foo.2016-07-18, 當前有效日誌檔案重新建立,並命名為/wombat/foo.txt |
/wombat/%d{yyyy/MM}/foo.txt | 每月一更 | file屬性未設定的情況下:在2016年7月,日誌輸出到到/wombat/2016/07/foo.txt。在7月31號午夜24點,日誌重定向輸出到/wombat/2016/08/foo.txt。 file屬性設定為/wombat/foo.txt的情況下:當前有效日誌檔案為file指定值,在月末24點,歸檔日誌,並重新建立file指定的檔案,並將日誌輸出流重定向到這個新檔案。 |
/wombat/foo.%d{yyyy-ww}.log | 每星期一更,需要注意,每星期第一天與區域設定有關 | 與上類似 |
/wombat/foo%d{yyyy-MM-dd_HH}.log | 每小時一更 | 與上類似 |
/wombat/foo%d{yyyy-MM-dd_HH-mm}.log | 每分鐘一更 | 與上類似 |
/wombat/foo%d{yyyy-MM-dd_HH-mm, UTC}.log | 每分鐘一更,並且採用UTC時間 | 與上類似,除了時間被格式化成UTC時間 |
/foo/%d{yyyy-MM,aux}/%d.log | 每日一更 | 包含兩個%d,第一個包含aux說明是並非主要的滾動引數,主要是用來做資料夾分割。也就是講每天的日誌按月份劃分儲存在不同的路徑下 |
fileNamePattern | Rollover schedule | Example |
---|---|---|
/wombat/foo.%d.gz | 每日一更,自動壓縮並歸檔日誌檔案 | file屬性未設定的情況下:在2016年7月17日,日誌輸出到 /wombat/foo.2016-07-17,在午夜24點,日誌檔案會被壓縮並重新命名為/wombat/foo.2016-07-17.gz。之後日誌便重新定向到/wombat/foo.2016-07-18 file屬性被設定成/wombat/foo.txt的情況下:當前有效日誌檔名永遠不變,在每日0點滾動日誌,並壓縮日誌。 |
<root level="DEBUG"> <appender-ref ref="FILE" /> </root> </configuration> SizeAndTimeBasedRollingPolicy 有時候你不僅想通過時間來規定滾動策略,還希望同時限制每個日誌檔案的大小。在TimeBasedRoolingPolicy中已經提供限制總日誌檔案的大小的功能,而SizeAndTimeBasedRollingPolicy提供了更為強大的,針對單個日誌檔案的大小限制能力。 看個小例子: <configuration> <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>mylog.txt</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> <maxFileSize>100MB</maxFileSize>
<maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="ROLLING" /> </root> </configuration> 需要注意的是:在該例子中,fileNamePattern中不僅包含了%d,還包含了%i,這兩個都是必要的識別符號。%i代表日誌索引號。就是今天的日誌已經拓展到第幾份了,以0開始。 在1.1.7版本之前,使用的是SizeAndTimeBasedFNATP,之後就採用SizeAndTimeBasedRollingPolicy,SizeAndTimeBasedRollingPolicy繼承了SizeAndTimeBasedFNATP。 FixedWindowRollingPolicy 固定視窗的日誌滾動策略 看下引數先:
Property Name | Type | Description |
---|---|---|
minIndex |
int |
這個引數指定視窗索引的最小值 |
maxIndex |
int |
這個引數指定視窗索引的最大值 |
fileNamePattern |
String |
這個引數與之前的fileNamePattern沒什麼差別,唯一需要注意的是必須包含%i識別符號,這個識別符號的作用是指明當前視窗索引的值。 例如將fileNamePattern設定成 "MyLogFile%i ",minIndex為1,maxIndex為3,則會建立MyLogFile1.log, MyLogFile2.log and MyLogFile3.log.這三個歸檔日誌檔案。 |
TriggeringPolicy
負責RollingFileAppender何時發生日誌滾動
介面說明:
package ch.qos.logback.core.rolling;
import java.io.File;
import ch.qos.logback.core.spi.LifeCycle;
public interface TriggeringPolicy<E> extends LifeCycle {
/*該方法決定是否發生日誌滾動*/
public boolean isTriggeringEvent(final File activeFile, final <E> event);
}
SizeBasedTriggeringPolicy
SizeBasedTriggeringPolicy只接收一個引數,maxFileSize,預設值:10MB
可接受B,KB,MB,GB
SocketAppender及SSLSocketAppender
到目前為止我們講的appender都只能將日誌輸出到本地資源。與之相對的,SocketAppender就是被設計用來輸出日誌到遠端例項中的。SocketAppender輸出日誌採用明文方式,SSLSocketAppender則採用加密方式傳輸日誌。
被序列化的日誌事件的型別是 LoggingEventVO繼承ILoggingEvent介面。遠端日誌記錄並非是侵入式的。在反序列化接收後,日誌事件就可以好像在本地生成的日誌一樣處理了。多個SockerAppender可以向同一臺日志伺服器傳送日誌。SocketAppender並不需要關聯一個Layout,因為它只是傳送序列化的日誌事件給遠端日誌伺服器。SocketAppender的傳送操作是基於TCP協議的。因此如果遠端伺服器是可到達的,則日誌會被其處理,如果遠端伺服器宕機或不可到達,那麼日誌將會被丟棄。等到遠端伺服器復活,日誌傳送將會透明的重新開始。這種透明式的重連,是通過一個“連線“執行緒週期性的嘗試連線遠端伺服器實現的。
Logging events會由TCP協議實現自動緩衝。這意味著,如果網路速度比日誌請求產生速度快,則網路速度並不會影響應用。但如果網路速度過慢,則網路速度則會變成限制,在極端情況下,如果遠端日誌伺服器不可到達,則會導致應用最終阻塞。不過,如果伺服器可到達,但是伺服器宕機了,這種情況,應用不會阻塞,而只是丟失一些日誌事件而已。
需要注意的是,即使SocketAppender沒有被logger連結,它也不會被gc回收,因為他在connector thread中任然存在引用。一個connector thread 只有在網路不可達的情況下,才會退出。為了防止這個垃圾回收的問題,我們應該顯示宣告關閉SocketAppender。長久存活並建立/銷燬大量的SocketAppender例項的應用,更應該注意這個問題。不過大多數應用可以忽略這個問題。如果JVM在SocketAppender關閉之前將其退出,又或者是被垃圾回收,這樣子可能導致丟失一些還未被傳輸,在管道中等待的日誌資料。為了防止避免日誌丟失,經常可靠的辦法就是呼叫SocketAppender的close方法,或者呼叫LoggerContext的stop方法,在退出應用之前。
下面我們來看看SocketAppender的屬性:
Property Name | Type | Description |
---|---|---|
includeCallerData |
boolean |
是否包含呼叫者的資訊 如果為true,則以下日誌輸出的 ?:? 會替換成呼叫者的檔名跟行號,為false,則為問號。 2006-11-06 17:37:30,968 DEBUG [Thread-0] [?:?] chapters.appenders.socket.SocketClient2 - Hi |
port |
int |
埠號 |
reconnectionDelay | 重連延時,如果設定成“10 seconds”,就會在連線u武器失敗後,等待10秒,再連線。預設值:“30 seconds”。如果設定成0,則關閉重連功能。 | |
queueSize |
int |
設定緩衝日誌數,如果設定成0,日誌傳送是同步的,如果設定成大於0的值,會將日誌放入佇列,佇列長度到達指定值,在統一發送。可以加大服務吞吐量。 |
eventDelayLimit | 設定日誌超時丟棄時間。當設定“10 seconds”類似的值,如果日誌佇列已滿,而伺服器長時間來不及接收,當滯留時間超過10 seconds,日誌就會被丟棄。 預設值: 100 milliseconds | |
remoteHost |
String |
遠端日誌伺服器的IP |
相關推薦閱讀Logback文件筆記--Logback的Appender配置Logback將執行日誌事件輸出的元件稱為Appender,實現的Appender必須繼承 介面如下: package ch.qos.logback.core; import ch.qos.logback.core.spi.ContextAware; i inittab配置文件--筆記inittab配置文件一·inittab文件的結構:id runlevels action process 1) id 用於在inittab文件中唯一標識一個配置記錄 2) runlevels 用於指定該記錄在哪些運行級別中運行 3) action 用於描述記錄將執行哪種類型的動作 4) proc 第一篇 Spring boot 配置文件筆記spring ati oot bsp value 程序 需要 style 指定 spring boot 不需要配置太多文件程序便可正常運行,特殊情況需要我們自己配置文件。 項目以IDEA寫實例,系統會默認在src/main/java/resources目錄下創建ap struts.xml文件中action配置、OGNL的投影映射、OGNL表達式的符號傳參 路徑 req rop [0 path 中一 prop 後綴 在struts.xml文件中不同的action配置,請求的路徑是不一樣的 1、請求 path = user!query.action; 配置如下; <action name="user" class= 域用戶配置文件的漫遊配置(全)windows 域環境 活動目錄 漫遊 趙一 漫遊的優勢: 1,方便用戶的操作,域用戶無論在哪個客戶端登錄,桌面環境配置都是一樣的,可以在外地辦公。 2,數據的統一存儲,管理更方便。一:搭建域控制器 1.此實驗環境是windows2008 2.win+R快捷鍵打開運行 dcpr Java propertis文件中組裝配置src 結果 ges rop 技術 希望 lin pan 裝配 目的: 實現在配置文件中,進行組裝 1、Properties文件配置如下: dns=http://211.103.227.133:8080 qrcode=${dns}/wx/views/invit maven 打包時動態替換properties資源文件中的配置值mave tools false sof get per 執行 ces pre pom build節點下面添加resource配置: [html] view plain copy <resources> samba文件共享服務配置(multiuser機制)二 (共兩節)掛載點 機制 tool 用戶 vim ins 掛載 samba install smb客戶端的multiuser掛載技術 --管理員只需要作一次掛載 --客戶端在訪問掛載點時,若需要不同權限,可臨時切換新的共享用戶【無需重新掛載】 實現方式 --掛載smb共享時啟用mul nginx的文件cache服務配置記錄(proxy_cache)pan orm java conn efault out clu key oct 根據業務部門需求,申請一臺文件的cache服務器。如下記錄在單臺機器上部署Nginx緩存服務過程: nginx緩存配置(緩存配置的參數這裏就不做過多解釋了,在前面的文檔中已說明過,這裏只做 Qt工程pro文件的簡單配置(尤其是第三方頭文件和庫)tex target data 資源文件 rules tdi som trac 允許 Qt開發中,pro文件是對正工程所有源碼、編譯、資源、目錄等的全方位配置的唯一方式,pro文件的編寫非常重要,以下對幾個重要項進行說明(win和linux,mac平臺通用配置) 註釋 ceph文件系統安裝配置分布式 ceph 文件系統 ceph文件系統安裝配置 1 前言Ceph是一種為優秀的性能、可靠性和可擴展性而設計的統一的、分布式文件系統。l Ceph OSDs: Ceph OSD 守護進程( Ceph OSD )的功能是存儲數據,處理數據的復制、恢復、回填、再均衡,並通過檢查其他OSD linux下Nginx配置文件(nginx.conf)配置設置詳解(windows用phpstudy集成)兩個 response 機制 .so 不用 filename 發送 php文件 code linux備份nginx.conf文件舉例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-2017111 讀取xml文件中的配置參數util 前臺 public 照片 xml文件 pan ras xmlns return paras.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring Windows bat 批處理文件筆記.cn bat 批處理文件 window 筆記 count 計算機 bsp 註釋 1、使用“::”註釋 2、net 命令 net accounts :獲取當前計算機賬戶信息 Windows bat 批處理文件筆記 3周第1次課 linux和windows互傳文件 用戶配置文件和密碼配置文件 用戶組管理 用戶管理windows inux 互傳文件 一、linux和windows互傳文件1.Linux 傳文件到 windows ##此辦法只適合使用(xshell securecrt)工具的用戶[root@centos701 ~]# yum install -y lrzsz ##下載支 linux和windows互傳文件, 用戶配置文件和密碼配置文件, 用戶組管理, 用戶管理linuxlinux和windows互傳文件用戶配置文件和密碼配置文件用戶組管理用戶管理linux和windows互傳文件yum install -y lrzsz用戶配置文件和密碼配置文件root:x:0:0:root:/root:/bin/bashserver:x:1000:1000::/home/serv Hosts文件實際應用 配置內部服務器提高訪問效率和速度數據 basic 之前 很大的 應用 image 部署 cloud 積累 一 hosts文件的作用和介紹 https://jingyan.baidu.com/article/335530da45485e19cb41c3d6.html https://www.cnblogs. Springboot 之 自定義配置文件及讀取配置文件ebo hello path host 目錄 tps pre 示例 control 本文章來自【知識林】 讀取核心配置文件 核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件 【驚雷】Linux下Rsync的文件同步的配置過程cti daemon 修改 測試的 傳輸文件 一個 -- iptable 勞動力 Rsync的文件同步實現 一、rsync 簡介 Rsync(remote synchronize)是一個遠程數據同步工具,簡要的概括就是主機於主機之間的文件目錄數據的一個同步。 2.27Linux和windows互傳;3.1用戶配置文件和密碼配置文件;3.2/3.3用戶組用戶用戶組管理 用戶管理 2.27 Linux和windows互傳文件1. yum安裝 lrzsz:[root@hao-01 ~]# yum install -y lrzsz2. Linux上的文件,傳輸給windows下:sz 跟文件[root@hao-01 ~]# sz 1.txt3. windows |