首先,我想說說我最初對Log4j2態度,多是我對Log4j2的認識不夠深,在剛接觸到有關項目運用到Log4j2的配置時,我修改最多的是其配置文件,其實也不過是修改一些路徑什麼的。至於說在項目開發時去全面配置Log4j的其它內容,目前我到尚未,由於這些核心的配置都事先已被架構師搭建好了,重要的地方咱們修改的少之又少。java
今天,我寫這篇博文主要是想表達心裏的獨特認識和體會,因爲是心裏獨白,那麼接下來有關log4j的配置只會部分作下簡單說明。其實挺恨本身爲何工做了近4年了到如今才發出這樣的吶喊?此時,心裏在說本身太笨了。其實都怨本身的自學能力太差,不敢於嘗試新的東西;在面對困難時,不加思考一味的尋求幫助。架構
最近幾天,因項目組特殊,須要我根據目前的現狀修改下有關Log4j2的配置,條件:A.由原來按照指定文件大小循環生成文件修改成按照指定時間去生成。B.將生成的文件自動備份到指定目錄。當時我明白需求,我也明白我對Log42的認識程度,心裏在想又一個很難的任務須要本身去克服了。第二個(B)需求其實仍是挺容易去實現的,對於第一個(A)需求我從未據說過,感受會很難的樣子。次日上午一上班就一個勁的baidu啊、google啊、上官網啊 都沒有找到想要的答案,網上都是一些關於Log4j2的簡單配置,並且還千篇一概,從中還發現一篇文章在不一樣的地方都有出現。官網上對於以指定時間進行生成的文件最小單位是小時,其在策略中的配置是<TimeBasedTriggeringPolicy modulate="true" interval="1" />,而後我不停的查相關資料,最後仍是沒有本身想要的按照分鐘進行配置的。以後我就感受多是實現不了,就直接找到了源碼研究了一下,大體看了一下TimeBasedTriggeringPolicy類,該類實現了一個TriggeringPolicy類,而且只是實現了其兩個方法,而後我就想本身些一個類去實現TriggeringPolicy類中的函數,將interval="1"按照分鐘進行處理,引用自定義的類須要在Configuration標籤中用packages="cn.xx.xx"來指定你得類路徑,記得名稱不要和與原來的TimeBasedTriggeringPolicy類名稱同樣,由於在加載Log4j2的配置文件時會先找自身的文件,而後在去自定義的類。以後就編寫了一個類實現其兩個方法,當時測試的工程是普通的一個java project工程,爲實現讓程序可以不停的運行,因而編寫以一個定時的方法,每間隔0.5秒執行一個,這樣程序就會不停的運行,日誌也就不停的打印到文件,在中間實現可以以分鐘去處理文件也花費了挺長時間的。在這裏說一下我是先的思路吧,主要是獲取系統啓動時的啓動運行時間和當前時間,比較兩時間間隔相差的秒數,好比一分鐘執行一次,則秒數間隔爲60秒就返回一個reture true的操做,大體就是這個意思,固然了中間也要有嚴格的處理。好比,運行10秒中程序就沒有了業務,而後在1分鐘20秒是又有業務了,由於這時的兩時間間隔遠遠大於60秒,針對這樣的問題,當時寫的程序就沒能實現。不過最後仍是解決了這樣的問題,就是多判斷一次,若是獲取的時間間隔大於60秒,則將系統啓動時間重置爲當前時間,而後返回return true的操做,雖然不夠很是嚴謹,但這樣基本上就知足了要求。在最後,將本身的方案給項目組解說時,就運行了一下作的效果,要的就是這樣的一個效果,可是有牛人認爲說Log4j2中應該有這樣(按分鐘)的說明。而後,她就找到源碼跟蹤了一下,最後發現Log4j不光有分鐘的配置,還有秒、小時、天、月等都是能夠配置的,不過Log4j2針對這些配置是須要一個基本的配置項,<RollingRandomAccessFile name="running-log"
fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log">,interval中的值取決於filePatter中定義的時間格式,若是%d{yyyyy-MM-dd HH:mm:ss}則interval="120"則是間隔120秒生成一個日誌文件,若是時間格式爲%d{yyyyy-MM-dd HH:mm}則interval="2"則是間隔2分鐘後生成一個日誌文件... ,最後項目組一致認同後者的配置比較可靠,大家可想我當時那種心情——愧疚、傷心、痛恨,中最是讓我羨慕,發現本身研究問題的能力太差了,一樣是能夠實現一個功能,爲何沒能仔細、認真的看源碼,可能與我當時急躁解決問題的心情有關,當時心中一味這想進快解決問題,根本就沒多看源碼。不過相似於這樣的配置,在官網上並無詳細的說明,哎,之後總之多看文檔和源碼,我以爲這裏面折射出不少作人的道理和解決問題的能力,你不能不佩服比你經驗豐富的人... 哎!不說那麼多了,咱們要站在巨人的肩膀上看待問題,多學習下別人的優勢,多去和優秀的人對比下本身,記住並彌補它!dom
今天寫這篇博客就是以此來提醒本身,作事不能浮躁,要穩下心來對人對事!函數