springboot log4j2不能打印框架錯(cuò)誤日志的解決方案
springboot log4j2為什么不能打印框架錯(cuò)誤日志
問題
使用springboot時(shí)老的框架使用的是log4j2,為了兼容不能夠使用logback,按照網(wǎng)上的教程導(dǎo)入了log4j2但是不能夠輸入框架錯(cuò)誤日志,例如bean命名重復(fù),springmvc url映射重復(fù),這些都是開發(fā)中所需要的友好提示
解決方案
怎么出現(xiàn)的問題,就不詳細(xì)描述了,原因是我引入的log42是散件不是基于springboot集成配置的,導(dǎo)致只能夠輸出基本信息,原理我會(huì)在 一個(gè)月后左右探究完畢補(bǔ)充。
下面我說說怎么正確用springboot輸出springboot框架錯(cuò)誤的
1. 排除原生logback日志,否則會(huì)沖突
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- spring boot 默認(rèn)的日志框架是Logback,所以在引用log4j之前,需要先排除該包的依賴,再引入log4j2的依賴 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2. 引入集成springboot配置的log4j2
我出現(xiàn)的我問題就是這里,我引入的是原先ssm用的log4j2導(dǎo)致,沒有正確注入,初始log4j失敗了,所以選擇最省事的法子,引入人家寫好的log4jpom
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
可以看看人家默認(rèn)的pom.xml引入的log4j,就知道自己引用出錯(cuò)在哪里了
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.10.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.10.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jul</artifactId>
<version>2.10.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
</dependencies>
配置后的效果
如下圖所示,我寫了兩個(gè) @RequestMapping() value="listTree"的方法
@RequestMapping("listTree")
@ResponseBody
public JsonResult getAreaTree() {
List<AreaModel> all = areaService.findAll();
all.forEach(x -> x.setName(x.getAreaName()));
return new JsonResult(all);
}
@RequestMapping("listTree")
@ResponseBody
public JsonResult getAreaTree2() {
List<AreaModel> all = areaService.findAll();
all.forEach(x -> x.setName(x.getAreaName()));
return new JsonResult(all);
}
正確打印錯(cuò)誤日志
[reform]2019-01-09 09:31:47.570 [WARN]:Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'areaController' method
public com.ld.model.json.JsonResult com.ld.action.area.AreaController.getAreaTree2()
to {[/area/listTree]}: There is already 'areaController' bean method
public com.ld.model.json.JsonResult com.ld.action.area.AreaController.getAreaTree() mapped. org.apache.commons.logging.impl.Jdk14Logger.log(Jdk14Logger.java:99)
springboot 2.0 log4j2日志打印問題
日志不能正常打印,測試、線上環(huán)境未生成滾動(dòng)日志
日志文件配置:


控制臺(tái)信息:

解決辦法:
在pom 文件中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 排除自帶的logback依賴 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
或者:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除自帶的logback依賴 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中將File轉(zhuǎn)化為MultipartFile的操作
這篇文章主要介紹了Java中將File轉(zhuǎn)化為MultipartFile的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
spring-redis-session 自定義 key 和過期時(shí)間
這篇文章主要介紹了spring-redis-session 自定義 key 和過期時(shí)間,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
SpringBoot接收接口入?yún)⒌姆绞叫〗Y(jié)
這篇文章主要給大家介紹了SpringBoot接收接口入?yún)⒌膸追N方式,我們從調(diào)用方的視角去看待這個(gè)問題,對調(diào)用方來說,它在調(diào)用接口時(shí)有好幾種傳參方式,下面,將會(huì)依次對這幾種參數(shù)方式進(jìn)行講解和代碼示例,需要的朋友可以參考下2024-01-01
SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐
本文主要介紹了SpringBoot結(jié)合mybatis-plus實(shí)現(xiàn)分頁的項(xiàng)目實(shí)踐,主要基于MyBatis-Plus 自帶的分頁插件 PaginationInterceptor,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Java中jakarta.validation數(shù)據(jù)校驗(yàn)幾個(gè)主要依賴包講解
在Java開發(fā)中,BeanValidationAPI提供了一套標(biāo)準(zhǔn)的數(shù)據(jù)驗(yàn)證機(jī)制,尤其是通過JakartaBeanValidation(原HibernateValidator)實(shí)現(xiàn),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09

