log4j与logback冲突的解决与思考
maven项目使用log4j或者slf4j(Simple logging Facade for Java)生成日志
参考博客log4j https://blog.csdn.net/qq_38941812/article/details/87975938
和我廖雪峰大神的博客slf4j https://www.liaoxuefeng.com/wiki/1252599548343744/1264739155914176
这个问题解决了一下午,自己把自己坑了~~~~
- 首先我们使用log4j
1.1 去maven仓库下载log4j在pom.xml中的配置
log4j在maven仓库中的配置下载地址
Commons Logging和Log4j这一对好基友
1.2 src同级(也可以建立目录,百度的不准哈)创建并设置log4j.properties
####Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度
设置###
输出信息到控制抬
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
输出DEBUG 级别以上的日志到=XX/logs/debug.log
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/lishan/Desktop/code/newcpw/clientParamWatch-service/src/logHistory/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
输出ERROR 级别以上的日志到=XX/logs/error.log
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =/Users/lishan/Desktop/code/newcpw/clientParamWatch-service/src/logHistory/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
输出INFO 级别以上的日志到=XX/logs/info.log
log4j.appender.I = org.apache.log4j.DailyRollingFileAppender
log4j.appender.I.File =/Users/lishan/Desktop/code/newcpw/clientParamWatch-service/src/logHistory/info.log
log4j.appender.I.Append = true
log4j.appender.I.Threshold = INFO
log4j.appender.I.layout = org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
输出WARN 级别以上的日志到=XX/logs/wran.log
log4j.appender.W = org.apache.log4j.DailyRollingFileAppender
log4j.appender.W.File =/Users/lishan/Desktop/code/newcpw/clientParamWatch-service/src/logHistory/warn.log
log4j.appender.W.Append = true
log4j.appender.W.Threshold = WARN
log4j.appender.W.layout = org.apache.log4j.PatternLayout
log4j.appender.W.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
输出FATAL 级别以上的日志到=XX/logs/fatal.log
log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.File =/Users/lishan/Desktop/code/newcpw/clientParamWatch-service/src/logHistory/fatal.log
log4j.appender.F.Append = true
log4j.appender.F.Threshold = FATAL
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.rootLogger = DEBUG, stdout, D, E, I, W, F
log4j.additivity.org.apache=true
参考博客 https://www.jianshu.com/p/ccafda45bcea
再在下方的链接中将log4j.properties的配置复制放进去
log4j详细配置
1.3 顶部-File-Project Structure-Modules-Source-src/logHistory-Resource-OK即可
1.4 创建Demo-LogTest
package com.alibaba.sdksearch;
import org.apache.log4j.Logger;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
public class LogTest {
private static Logger logger = Logger.getLogger(LogTest.class);
// 以下是slf4j的代码调用
//private static Logger logger = LoggerFactory.getLogger(LogTest.class);
1/**
2 * @param args
3 */
4public static void main(String[] args) {
5 // System.out.println("This is println message.");
6
7 // 记录debug级别的信息
8 logger.debug("This is debug message.===log4j还是slf4j");
9 // 记录info级别的信息
10 logger.info("This is info message..===log4j还是slf4j");
11 // 记录error级别的信息
12 logger.error("This is error message..===log4j还是slf4j");
13
14 System.out.println("xxx");
15}
运行结果如下,在查看src/LogHistory,出现info.log error.log
1.5 本来以上是OK的,结果自己傻,同时百度博客同时搜索内网其他人的代码,导致pom.xml中多写了slf4j的依赖--也就是下面的这段配置!!!导致包冲突了 !!! 导致日志文件写不到info error warning,一直为空。。。。。。。。反思:做事情要专一,不能看到玉米丢了苹果~~就是这个问题,解决了一下午,晚上突然觉得是不是配置的问题,要感谢一个高P RD一句话提示了我。
所以 这2段配置是不可以同时写在一起的,必须注释掉一个!
<!--httpclient begin-->
<dependency>
<groupId>org.apach.httpclient</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!--https://mvnrepository.com/artifact/log4j/log4j的配置,Commons Logging和Log4j这一对好基友-->
<!--<dependency>-->
<!--<groupId>log4j</groupId>-->
<!--<artifactId>log4j</artifactId>-->
<!--<version>1.2.17</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>commons-logging</groupId>-->
<!--<artifactId>commons-logging</artifactId>-->
<!--<version>1.1.2</version>-->
<!--</dependency>-->
<!--以上是log4j的maven配置,如下是slf4j的配置,2者不可并存,二选一!!!-->
<!--slf4j配置,注释log4j-->
<dependency>
<groupId>com.alibaba.schedulerx</groupId>
<artifactId>schedulerx2-spring-boot-starter</artifactId>
<version>0.3.2</version>
<exclusions>
<!--<exclusion>-->
<!--<artifactId>log4j</artifactId>-->
<!--<groupId>log4j</groupId>-->
<!--</exclusion>-->
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>config</artifactId>
<groupId>com.typesafe</groupId>
</exclusion>
<!--<exclusion>-->
<!--<artifactId>akka-slf4j_2.11</artifactId>-->
<!--<groupId>com.typesafe.akka</groupId>-->
<!--</exclusion>-->
</exclusions>
</dependency>
1.6 其实我使用log4j 配置好日志,但觉得也要顺应公司潮流,自己搞了下slf4j ,但其实配置文件是log4j的。也就是我无意中试了https://blog.51cto.com/jack88/2135471?source=dra 这个博客里的第6种情况,日志也是可以写进去的。。。但为了统一性,最后我改成了log4j。最后项目迁移改成了slf4j
待续
待续