【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案
由于批量更新的时候一直无法定位问题出处,就去服务器定位日志,奈何日志一直无法输出,为了能够更好的定位问题,痛定思痛后逐步排查最终解决问题。如有客官看到此处,请不要盲目对号入座,我的项目环境或许与你有区别所以解决方案不一定适合,此贴只作为工作记录,并对出现相同问题,且项目环境相同的朋友作为借鉴而已,如没有帮到,也请嘴下留情。
首先贴出日志文件:log4j2.yml
# 共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
Configuration:
status: info
monitorInterval: 30
Properties: # 定义全局变量
Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
- Dlog.level.console=info
- name: log.level.console
value: debug
- name: log.path
value: /data/txv1.0/tx-data/logs
- name: project.name
value: tx_data
- name: log.pattern
value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n"
Appenders:
Console: #输出到控制台
name: CONSOLE
target: SYSTEM_OUT
PatternLayout:
pattern: ${log.pattern}
# 启动日志
RollingFile:
- name: ROLLING_FILE
fileName: ${log.path}/${project.name}.log
filePattern: "${log.path}/historyRunLog/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: ${log.pattern}
Filters:
# 一定要先去除不接受的日志级别,然后获取需要接受的日志级别
ThresholdFilter:
- level: fatal
onMatch: DENY
onMismatch: NEUTRAL
- level: debug
onMatch: ACCEPT
onMismatch: DENY
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
# 平台日志
- name: PLATFORM_ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/platform/${project.name}_platform.log
filePattern: "${log.path}/platform/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: ${log.pattern}
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
# 业务日志
- name: BUSSINESS_ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/bussiness/${project.name}_bussiness.log
filePattern: "${log.path}/bussiness/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: ${log.pattern}
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
# 错误日志
- name: EXCEPTION_ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/exception/${project.name}_exception.log
filePattern: "${log.path}/exception/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
ThresholdFilter:
level: error
onMatch: ACCEPT
onMismatch: DENY
PatternLayout:
pattern: ${log.pattern}
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
# DB 日志
- name: DB_ROLLING_FILE
ignoreExceptions: false
fileName: ${log.path}/db/${project.name}_db.log
filePattern: "${log.path}/db/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: ${log.pattern}
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
Loggers:
Root:
level: debug
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
- ref: PLATFORM_ROLLING_FILE
- ref: BUSSINESS_ROLLING_FILE
- ref: EXCEPTION_ROLLING_FILE
- ref: DB_ROLLING_FILE
Logger:
- name: rolling
level: info
additivity: true
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
- name: platform
level: debug
additivity: true
AppenderRef:
- ref: CONSOLE
- ref: PLATFORM_ROLLING_FILE
- name: bussiness
level: info
additivity: true
AppenderRef:
- ref: CONSOLE
- ref: BUSSINESS_ROLLING_FILE
- name: exception
level: debug
additivity: true
AppenderRef:
- ref: CONSOLE
- ref: EXCEPTION_ROLLING_FILE
- name: db
level: debug
additivity: true
AppenderRef:
- ref: CONSOLE
- ref: DB_ROLLING_FILE
申明:此文件格式借鉴与网上一位忘记叫什么的朋友的,如有雷同请谅解或许我就是借鉴你的。
贴出原始依赖pom文件(部分,跟日志相关的)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<!-- 排除自带的日志依赖 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 配置 log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency> .......... <!-- 云服务依赖包 start -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu-version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss-version}</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>${qcloud-cos-version}</version>
</dependency>
<!-- 云服务依赖包 end -->
</dependencies>
由于启动之后再服务器中一直存在这样一种警告
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/data/txv1.0/tx-data/webapps/tx-data/WEB-INF/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/data/txv1.0/tx-data/webapps/tx-data/WEB-INF/lib/log4j-slf4j-impl-2.11.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 经过多次排查发现这个警告是提示slf4j-log4j12-xxx.jar 的依赖冲突
然后通过pom文件排查是否存在logger相关slf4j-log4j12-xxx.jar包的冲突,如图

上图是我去掉依赖冲突所以看不见相关依赖包,如果存在依赖的就会显示被那些jar所依赖,最终发现依赖的jar包
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>${qiniu-version}</version>
</dependency>
最后去掉这个包所依赖的slf4j-log4j12-xxx.jar包,就解决了如法输出日志信息的问题。
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>${qcloud-cos-version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
【记录】SpringBoot 2.X整合Log4j没有输出INFO、DEBUG等日志信息解决方案的更多相关文章
- (转)log4j(二)——如何控制日志信息的输出?
		一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 1 先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ... 
- log4j(二)——如何控制日志信息的输出?
		一:测试环境与log4j(一)——为什么要使用log4j?一样,这里不再重述 二:先看栗子再来下结论 import org.apache.log4j.*; import test.log4j.bean ... 
- Springboot项目启动不了。也不打印任何日志信息。
		Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ... 
- log4j配置输出到多个日志文件
		通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那么我们log4j为我们提供了这种功能,以下我们来一步一步看是怎么做的.这里以property的配置方式写. ... 
- log4j配置输出到多个日志文件(转)
		參考资料:http://logging.apache.org/log4j/1.2/manual.html 通常我们项目里,有一些重要的日志想单独的输出到指定的文件,而不是全总输出到系统的日志文件中.那 ... 
- 使用log4j使某些java类的日志信息输出到指定日志文件中
		Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI 组件.甚至是套接口服务器.NT 的事件记录器.UNIX Syslog ... 
- Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决
		今天遇到了跟下面文章一模一样的问题,下面文章的解决方案很好,在这里记录保存一下. Spring3+MyBatis3整合无法输出SQL语句问题的解决 
- 1分钟看懂log4j  配置自己想要的日志信息
		在开发的时候我们会希望 只将 sql信息的日志,已经自定义输出的日志进行打印 ,而一些框架级的日志不需要输出 如下 首先 rootLogger 设置日志级别 log4j.rootLogg ... 
- Log4j 配置数据库连接池(将日志信息保存到数据库)
		org.apache.log4j.jdbc.JDBCAppender 是利用传统的 JDBC 连接方法,这种方式连接数据库效率低下,为了解决这个问题,现在自定义一个 Log4j 的 Appender, ... 
随机推荐
- vue组件之间的传值——中央事件总线与跨组件之间的通信($attrs、$listeners)
			vue组件之间的通信有很多种方式,最常用到的就是父子组件之间的传值,但是当项目工程比较大的时候,就会出现兄弟组件之间的传值,跨级组件之间的传值.不可否认,这些都可以类似父子组件一级一级的转换传递,但是 ... 
- ItemsControl绑定的数据模板显示不同样式:模板选择器
			总所周知,wpf提供了数据模板,列表控件可以绑定数据实现批量显示同类型数据.不过同个数据模板显示不同的样式怎么办?这时我们可以用模板选择器. 首先我们可以将数据绑定到首先定义资源样式 <Data ... 
- 能访问的谷歌 http://209.116.186.231/
			能访问的谷歌 http://209.116.186.231/ 
- js深入之call、apply和bind
			一. call和apply 1. 代码完整实现 Function.prototype.mycall = function (context, ...argus) { if (typeof this ! ... 
- Golang 高效实践之defer、panic、recover实践
			前言 我们知道Golang处理异常是用error返回的方式,然后调用方根据error的值走不同的处理逻辑.但是,如果程序触发其他的严重异常,比如说数组越界,程序就要直接崩溃.Golang有没有一种异常 ... 
- c语言进阶9-值传递与地址传递
			一. 函数的值传递 函数的值传递是指参数为基本类型时,如整型.浮点型.字符型(特指单字符型)时,参数传递时是从实参拷贝一份值传给形参,形参的变化不会影响实参的值. 1. 基本类型做参数 ... 
- 深入了解数据校验:Java Bean Validation 2.0(JSR380)
			每篇一句 吾皇一日不退役,尔等都是臣子 相关阅读 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescri ... 
- cocos creator 小游戏区域截图功能实现
			截图是游戏中非常常见的一个功能,在cocos中可以通过摄像机和 RenderTexture 可以快速实现一个截图功能,具体API可参考:https://docs.cocos.com/creator/m ... 
- storm学习路线指南
			关于对storm的介绍已经有很多了,我这里不做过多的介绍,我介绍一下我自己的学习路线,希望能帮助一些造轮子的同学走一些捷径,毕竟我也是站在前人总结整理的基础上学习了,如果有不足之处,还请大家不要喷我. ... 
- SpringMVC简易架构图。。。
			DispatcherServlet拦截所有请求 -> 通过访问url路径找到对应的控制器 -> 通过适配器调用控制器的方法 -> 控制器里面的方法处理业务 -> 通过视图解析器 ... 
