log4j无厘头异常
今天系統(tǒng)升級,是web程序,備份程序之后,替換class下面的com的全部類文件后shutdown???tomcat,然后啟動程序,startup之后出現(xiàn)
java.lang.NullPointerException? at?org.apache.log4j.spi.LocationInfo.<init>(LocationInfo.java:104)? at?org.apache.log4j.spi.LoggingEvent.getLocationInformation(LoggingEvent.java:191)? at?org.apache.log4j.helpers.PatternParser$LocationPatternConverter.convert(PatternParser.java:483) at?org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:64)? at?org.apache.log4j.PatternLayout.format(PatternLayout.java:503)? at?org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:301)? at?org.apache.log4j.WriterAppender.append(WriterAppender.java:159)? Exception?in?thread?"Thread-1"?at?org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230)? at?org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65) at?org.apache.log4j.Category.callAppenders(Category.java:203)? at?org.apache.log4j.Category.forcedLog(Category.java:388)? at?org.apache.log4j.Category.info(Category.java:663)? at?cn.sh.flyhyp.kvdb.service.NodeService.onSystemExist(NodeService.java:55)? at?cn.sh.flyhyp.kvdb.service.NodeService$1.run(NodeService.java:40)一開始以為是log4j的問題,快速找資料,進行回滾。用原來的備份的整個工程恢復(fù),刪除正在運行的程序
啟動,發(fā)現(xiàn)還是一樣的錯,就奇怪了。
?
這個時候我就停掉了程序,因為之前的日志太多了,有800多M(你肯定會覺得有問題,是的,我也這樣認為。日志不應(yīng)該有這么多。即使這么多,也應(yīng)該使用log4j的分多個文件的配置,不然的話,文件會巨大到你無法打開。這么多的日志是因為:系統(tǒng)與第三方合作,需要積累原始報文,進行問題定位,交流)
?
沒有辦法打開,這個時候,我就想把原來的日志備份,這個時候停掉程序之后,發(fā)現(xiàn)日志還在刷。
我記得log4j是使用緩存的,那么這些日志是剛才啟動的系統(tǒng)的日志輸出,并不代表現(xiàn)在啟動的程序有問題,所以將原有日志備份,清空日志=
那么就奇怪了,那么之前的升級怎么會有問題呢
?
這個就奇怪了了,什么回事啊。這個包從測試環(huán)境拿過來的,都驗證過的了啊,這個時候就就查看系統(tǒng)信息,grep之后發(fā)現(xiàn),尼瑪
怎么又兩個進程在跑。原來由于日志文件并發(fā)太大,日志刷太猛了,shutdown命令不能關(guān)閉tomcat,需要等log4j輸出完成之后才能關(guān)閉。之前一直使用kill來關(guān)閉進程,今天使用shutdown就出問題了,尼瑪就關(guān)閉不了了。
?
兩個相同的程序同時大量并發(fā)寫文件,受不了啊。所以就報錯了,又嚇死哥一場。
?
- 總結(jié)與反思:
1、雙機互備
雖然當前系統(tǒng)的業(yè)務(wù)量和負載在一個很小的值,但是對于系統(tǒng)的穩(wěn)定性來說,還是有一定的要求。特別是在今天這種情況。如果存在雙機互備的情況,那么就可以升級的時候,做到幾乎業(yè)務(wù)的零影響。公司的其他系統(tǒng)都是這樣做的了,所以會在之后進行雙機互備。
?
2、是否可以考慮使用probe等工具進行tomcat的管理。
由于系統(tǒng)是使用自定義的框架系統(tǒng),并沒有如spring那樣的提供動態(tài)更改日志級別的功能。但是probe提供了對tomcat中的工程動態(tài)刷新日志配置信息的功能。是否值得接入??
但是probe在網(wǎng)上看資料分析,probe已經(jīng)很久沒有更新,并且存在一定的性能消耗。所以在對性能的評測出來之前,不建議使用。
可行方案為添加動態(tài)刷新日志級別的接口,提供日志配置的動態(tài)修改。
轉(zhuǎn)載于:https://www.cnblogs.com/evermaze/p/log4jerror.html
總結(jié)
以上是生活随笔為你收集整理的log4j无厘头异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工程造价管理
- 下一篇: 证监会:《证券期货业信息安全保障管理办法