小編給大家分享一下SpringBoot中l(wèi)ogback日志保存到mongoDB的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、尖草坪ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的尖草坪網(wǎng)站制作公司?Springboot默認(rèn)集成的就是logback,logback相對(duì)來(lái)說是優(yōu)秀于log4j的,log4j2也是參考了logback的設(shè)計(jì)。
自定義Appender非常簡(jiǎn)單,繼承一下AppenderBase類即可。
可以看到有個(gè)AppenderBase,有個(gè)UnsynchronizedAppenderBase,還有個(gè)AsyncAppenderBase繼承了UnsynchronizedAppenderBase。從名字就能看出來(lái)區(qū)別,異步的、普通的、不加鎖的。
我們定義一個(gè)MongoDBAppender繼承UnsynchronizedAppenderBase
public class MongoDBAppender extends UnsynchronizedAppenderBase{ @Override protected void append(ILoggingEvent eventObject) { MongoTemplate mongoTemplate = ApplicationContextProvider.getBean(MongoTemplate.class); if (mongoTemplate != null) { final BasicDBObject doc = new BasicDBObject(); doc.append("level", eventObject.getLevel().toString()); doc.append("logger", eventObject.getLoggerName()); doc.append("thread", eventObject.getThreadName()); doc.append("message", eventObject.getFormattedMessage()); mongoTemplate.insert(doc, "log"); } } }
必須要實(shí)現(xiàn)一個(gè)append方法,這個(gè)方法就是logback輸出日志的地方,日志都保存在eventObject對(duì)象中,我們只需要獲取對(duì)象里的值并做自己的處理即可。
我們可以想象為,系統(tǒng)的ConsoleAppender就是不停的System.out.print(eventObject.getXXX),而FileAppender就是用OutpuptStream輸出到文件里。
我們要做的就是把日志保存到mongo里,Springboot已經(jīng)提供了MongoTemplate模板,需要注意日志輸出是隨著系統(tǒng)啟動(dòng)就開始的,而剛開始時(shí)MongoTemplate還沒有被初始化,是需要等待Spring給MongoTemplate賦值的。所以剛開始時(shí)為null,需要等spring初始化完畢,MongoTemplate才有值。
由于這個(gè)Appender不歸spring管理,所以我采用單獨(dú)獲取bean的方式。其中ApplicationContextProvider如下:
@Component public class ApplicationContextProvider implements ApplicationContextAware { private static ApplicationContext context; public static ApplicationContext getApplicationContext() { return context; } @Override public void setApplicationContext(ApplicationContext ac) throws BeansException { context = ac; } public staticT getBean(Class tClass) { return context.getBean(tClass); } public static T getBean(String name, Class tClass) { return context.getBean(name, tClass); } }
上面mongo操作日志入庫(kù)的比較簡(jiǎn)單,字段也沒有用完,大家可以根據(jù)自己希望保存的屬性來(lái)設(shè)計(jì)mongo的結(jié)構(gòu),然后入庫(kù)。
pom.xml
org.mongodb mongo-java-driver 3.4.2 ch.qos.logback logback-core 1.1.11 ch.qos.logback logback-classic 1.1.11
在Spring-logback.xml使用也很簡(jiǎn)單
只需要指明appender 的class即可。
以上是“SpringBoot中l(wèi)ogback日志保存到mongoDB的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!