您好,登錄后才能下訂單哦!
小編給大家分享一下SpringBoot中l(wèi)ogback日志保存到mongoDB的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
?Springboot默認(rèn)集成的就是logback,logback相對(duì)來說是優(yōu)秀于log4j的,log4j2也是參考了logback的設(shè)計(jì)。
自定義Appender非常簡(jiǎn)單,繼承一下AppenderBase類即可。
可以看到有個(gè)AppenderBase,有個(gè)UnsynchronizedAppenderBase,還有個(gè)AsyncAppenderBase繼承了UnsynchronizedAppenderBase。從名字就能看出來區(qū)別,異步的、普通的、不加鎖的。
我們定義一個(gè)MongoDBAppender繼承UnsynchronizedAppenderBase
public class MongoDBAppender extends UnsynchronizedAppenderBase<ILoggingEvent> { @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 static <T> T getBean(Class<T> tClass) { return context.getBean(tClass); } public static <T> T getBean(String name, Class<T> tClass) { return context.getBean(name, tClass); } }
上面mongo操作日志入庫(kù)的比較簡(jiǎn)單,字段也沒有用完,大家可以根據(jù)自己希望保存的屬性來設(shè)計(jì)mongo的結(jié)構(gòu),然后入庫(kù)。
pom.xml
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.11</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.11</version> </dependency>
在Spring-logback.xml使用也很簡(jiǎn)單
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="MY_FILE" class="com.example.demo.mongo.MongoDBAppender"> </appender> <!-- 測(cè)試環(huán)境+開發(fā)環(huán)境. 多個(gè)使用逗號(hào)隔開. --> <springProfile name="test,dev"> <logger name="org.springframework.web" level="INFO"> <appender-ref ref="MY_FILE"/> </logger> <logger name="com.example" level="INFO" /> </springProfile> </configuration>
只需要指明appender 的class即可。
以上是“SpringBoot中l(wèi)ogback日志保存到mongoDB的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。