我之前的項目已經成功使用過logback作為日志輸出,但是今天新項目在使用的時候,不輸出日志信息。
最后終於找到問題所在,並成功解決。解決步驟如下:
第一步:檢查pom.xml
按照以往慣例,我先檢查了pom.xml文件,看看logback的引用jar是否都存在:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.21</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.2.1</version> </dependency>
經檢查,jar包是齊全的,而且已經成功加載到本地:
第二步:查看日志輸出引用類是否正確
private static final org.slf4j.Logger LOG= org.slf4j.LoggerFactory.getLogger(MyTest.class);
LOG.info("======info");
沒有發現異常
第三步:檢查logback.xml
只有最簡單的控制台輸出打印,也無異常
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="false" scanPeriod="3 seconds"> <contextName>solr</contextName> <property name="log_dir" value="D:\\log\\solr" /> <!-- 控制台打印 --> <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- %logger輸出完整類名 %file僅輸出類名 --> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg %file:%line%n</Pattern> </encoder> </appender> <!-- 從低到高ALL、 TRACE 、 DEBUG 、INFO 、WARN 、ERROR 、OFF 參考ch.qos.logback.classic.Level類 --> <root level="INFO"> 這個root由logger節點替代,因為可以分不同包管理不同的日志文件 <appender-ref ref="ConsoleAppender" /> </root> </configuration>
第四步:檢查控制台消息
我仔細看了下控制台打印消息,發現SLF4J在警告重復綁定,而且實際綁定的並非我指定的:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/root/workspace_bigdata/solr/src/main/webapp/WEB-INF/lib/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/root/repository/ch/qos/logback/logback-classic/1.2.1/logback-classic-1.2.1.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]
log4j:WARN No appenders could be found for logger (com.solr.SolrTest).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
經排查,我發現在WEB-INF\lib目錄下和pom.xml中重復導入了slf4j-api的jar包,而且是不同版本號的,但這實際上並不影響日志打印。
最后發現,在WEB-INF\lib目錄下我還引入了另外兩個jar:
log4j-1.2.17.jar slf4j-log4j12-1.7.7.jar
直接導致logback.xml配置的日志無效。
最后移除這兩個jar,日志打印正常。