首先,我想說說我最初對Log4j2態度,可能是我對Log4j2的認識不夠深,在剛接觸到有關項目運用到Log4j2的配置時,我修改最多的是其配置文件,其實也不過是修改一些路徑什么的。至於說在項目開發時去全面配置Log4j的其它內容,目前我到還沒有,因為這些核心的配置都事先已被架構師搭建好了,重要的地方我們修改的少之又少。
今天,我寫這篇博文主要是想表達內心的獨特認識和體會,由於是內心獨白,那么接下來有關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分鍾后生成一個日志文件... ,最后項目組一致認同后者的配置比較可靠,你們可想我當時那種心情——愧疚、傷心、痛恨,中最是讓我羡慕,發現自己研究問題的能力太差了,同樣是可以實現一個功能,為什么沒能仔細、認真的看源碼,可能與我當時急躁解決問題的心情有關,當時心中一味這想進快解決問題,根本就沒多看源碼。不過類似於這樣的配置,在官網上並沒有詳細的說明,哎,以后總之多看文檔和源碼,我覺得這里面折射出很多做人的道理和解決問題的能力,你不能不佩服比你經驗豐富的人... 哎!不說那么多了,我們要站在巨人的肩膀上看待問題,多學習下別人的優點,多去和優秀的人對比下自己,記住並彌補它!
今天寫這篇博客就是以此來提醒自己,做事不能浮躁,要穩下心來對人對事!
