說來慚愧,今天就寫了個"hello world",了解了一下log4j的日志。
本來是想在控制台打印個log信息,也是遇到坎坷重重,開始也沒去了解log4j就來使用,log4j配置文件開始用的log4j.properties,結果控制台一直打印ERROR StatusLogger No log4j2 configuration file found.也就是Log4j2配置文件沒找到的意思。
我就把log4j.properties文件名改成log4j2.properties,結果不報錯了,但是就是不打印日志,直接就結束運行了(Process finished with exit code 0),現在想想好愚蠢啊。
后來經過百般折騰,發現log4j是log4j,log4j2是log4j2,不能混用啊,但它們都是出自同一個公司,log4j2顧名思義是第二代,是log4j的優化升級版。
log4j的配置文件是log4j.properties,是以.properties后綴名結尾的文件命名,而log4j2的配置文件一般是xml文件或json,以.xml或.json后綴格式的命名,log4j更新到1.2.17版就停止了更新,發布了Log4j2;
我加入的jar包一直是log4j2的jar包,開始使用了log4j的配置文件(log4j.properties),所以一直打印不出來。后來重新加入配置文件log4j2.xml后,就可以打印了。
maven的pom.xml文件中加入的依賴:加入log4j的實現和log4j核心包,如果版本號(version)在2.0以下,配置文件就是.properties了哦
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.6.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.2</version> </dependency>
如果是springboot項目:需要排除一個logback的jar包,以免沖突:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <!--log4j-slf4j-impl與 logback-classic包不兼容,刪除這個包 --> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency>
log4j2.xml文件:網上復制的一個,寫的挺全,由於我只用到在控制台打印輸出,所以我把沒用到的都注釋了。
后面用到了文件輸出,需要的可以點擊查看:http://www.cnblogs.com/hyyq/p/7171227.html
<?xml version="1.0" encoding="UTF-8" ?><!--
status : 這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,會看到log4j2內部各種詳細輸出
monitorInterval : Log4j能夠自動檢測修改配置文件和重新配置本身, 設置間隔秒數。注:本配置文件的目標是將不同級別的日志輸出到不同文件,最大2MB一個文件, 文件數據達到最大值時,舊數據會被壓縮並放進指定文件夾
-->
<Configuration status="WARN" monitorInterval="600"><span style="color: #008000;"><!--</span><span style="color: #008000;"><Properties> &lt;!&ndash; 配置日志文件輸出目錄,此配置將日志輸出到tomcat根目錄下的指定文件夾 &ndash;&gt; <Property name="LOG_HOME">${sys:catalina.home}/WebAppLogs/SSHExample</Property> </Properties></span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">Appenders</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;">這個輸出控制台的配置,這里輸出除了warn和error級別的信息到System.out</span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">Console </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="console_out_appender"</span><span style="color: #ff0000;"> target</span><span style="color: #0000ff;">="SYSTEM_OUT"</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) 優先級,即DEBUG,INFO,WARN,ERROR, </span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">ThresholdFilter </span><span style="color: #ff0000;">level</span><span style="color: #0000ff;">="ERROR"</span><span style="color: #ff0000;"> onMatch</span><span style="color: #0000ff;">="DENY"</span><span style="color: #ff0000;"> onMismatch</span><span style="color: #0000ff;">="ACCEPT"</span><span style="color: #0000ff;">/></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 輸出日志的格式 </span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">PatternLayout </span><span style="color: #ff0000;">pattern</span><span style="color: #0000ff;">="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"></</span><span style="color: #800000;">Console</span><span style="color: #0000ff;">></span>
<!--
<!–這個輸出控制台的配置,這里輸出warn和error級別的信息到System.err,在eclipse控制台上看到的是紅色文字–>
<Console name="console_err_appender" target="SYSTEM_ERR">
<!– 控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) –>
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<!– 輸出日志的格式 –>
<PatternLayout pattern="%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n"/>
</Console>
--><!-- <!– TRACE級別日志 –>
<!– 設置日志格式並配置日志壓縮格式,壓縮文件獨立放在一個文件夾內,
日期格式不能為冒號,否則無法生成,因為文件名不允許有冒號,此appender只輸出trace級別的數據到trace.log –>
<RollingRandomAccessFile name="trace_appender"
immediateFlush="true" fileName="${LOG_HOME}/trace.log"
filePattern="${LOG_HOME}/trace/trace - %d{yyyy-MM-dd HH_mm_ss}.log.gz">
<PatternLayout>
<pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern>
</PatternLayout>
<Policies><!– 兩個配置任選其一 –>&lt;!&ndash; 每個日志文件最大2MB &ndash;&gt; <SizeBasedTriggeringPolicy size="2MB"/> </Policies> <Filters>&lt;!&ndash; 此Filter意思是,只輸出debug級別的數據 &ndash;&gt; &lt;!&ndash; DENY,日志將立即被拋棄不再經過其他過濾器; NEUTRAL,有序列表里的下個過濾器過接着處理日志; ACCEPT,日志會被立即處理,不再經過剩余過濾器。 &ndash;&gt; <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </RollingRandomAccessFile> &lt;!&ndash; DEBUG級別日志 &ndash;&gt; &lt;!&ndash; 設置日志格式並配置日志壓縮格式,壓縮文件獨立放在一個文件夾內, 日期格式不能為冒號,否則無法生成,因為文件名不允許有冒號,此appender只輸出debug級別的數據到debug.log &ndash;&gt; <RollingRandomAccessFile name="debug_appender" immediateFlush="true" fileName="${LOG_HOME}/debug.log" filePattern="${LOG_HOME}/debug/debug - %d{yyyy-MM-dd HH_mm_ss}.log.gz"> <PatternLayout> <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern> </PatternLayout> <Policies>&lt;!&ndash; 兩個配置任選其一 &ndash;&gt; &lt;!&ndash; 每個日志文件最大2MB &ndash;&gt; <SizeBasedTriggeringPolicy size="2MB"/> &lt;!&ndash; 如果啟用此配置,則日志會按文件名生成新壓縮文件, 即如果filePattern配置的日期格式為 %d{yyyy-MM-dd HH} ,則每小時生成一個壓縮文件, 如果filePattern配置的日期格式為 %d{yyyy-MM-dd} ,則天生成一個壓縮文件 &ndash;&gt; &lt;!&ndash; <TimeBasedTriggeringPolicy interval="1" modulate="true" /> &ndash;&gt; </Policies> <Filters>&lt;!&ndash; 此Filter意思是,只輸出debug級別的數據 &ndash;&gt; &lt;!&ndash; DENY,日志將立即被拋棄不再經過其他過濾器; NEUTRAL,有序列表里的下個過濾器過接着處理日志; ACCEPT,日志會被立即處理,不再經過剩余過濾器。 &ndash;&gt; <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </RollingRandomAccessFile> &lt;!&ndash; INFO級別日志 &ndash;&gt; <RollingRandomAccessFile name="info_appender" immediateFlush="true" fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/info/info - %d{yyyy-MM-dd HH_mm_ss}.log.gz"> <PatternLayout> <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="2MB"/> </Policies> <Filters> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </RollingRandomAccessFile> &lt;!&ndash; WARN級別日志 &ndash;&gt; <RollingRandomAccessFile name="warn_appender" immediateFlush="true" fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn/warn - %d{yyyy-MM-dd HH_mm_ss}.log.gz"> <PatternLayout> <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="2MB"/> </Policies> <Filters> <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </RollingRandomAccessFile> &lt;!&ndash; ERROR級別日志 &ndash;&gt; <RollingRandomAccessFile name="error_appender" immediateFlush="true" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error/error - %d{yyyy-MM-dd HH_mm_ss}.log.gz"> <PatternLayout> <pattern>%5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n</pattern> </PatternLayout> <Policies> <SizeBasedTriggeringPolicy size="2MB"/> </Policies> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> </RollingRandomAccessFile></span><span style="color: #008000;">--></span> <span style="color: #0000ff;"></</span><span style="color: #800000;">Appenders</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">Loggers</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 配置日志的根節點 </span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">root </span><span style="color: #ff0000;">level</span><span style="color: #0000ff;">="trace"</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">appender-ref </span><span style="color: #ff0000;">ref</span><span style="color: #0000ff;">="console_out_appender"</span><span style="color: #0000ff;">/></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> <appender-ref ref="console_err_appender"/> <appender-ref ref="trace_appender"/> <appender-ref ref="debug_appender"/> <appender-ref ref="info_appender"/> <appender-ref ref="warn_appender"/> <appender-ref ref="error_appender"/></span><span style="color: #008000;">--></span> <span style="color: #0000ff;"></</span><span style="color: #800000;">root</span><span style="color: #0000ff;">></span> <span style="color: #008000;"><!--</span><span style="color: #008000;"> 第三方日志系統 </span><span style="color: #008000;">--></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.core"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.beans"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.context"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.springframework.web"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="info"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.jboss.netty"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="warn"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">logger </span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="org.apache.http"</span><span style="color: #ff0000;"> level</span><span style="color: #0000ff;">="warn"</span><span style="color: #0000ff;">/></span> <span style="color: #0000ff;"></</span><span style="color: #800000;">Loggers</span><span style="color: #0000ff;">></span>
</Configuration>
番外篇:
我在代碼中打印的是info級別的log,里面有中文,沒想到idea工具的控制台輸出亂碼了,解決方法是在idea安裝目錄下的bin目錄下的idea.exe.vmoptions文件的最后一行加入”-Dfile.encoding=UTF-8"(沒有雙引號),並把idea工程編碼也改成utf-8(一般是默認utf-8),修改方式是file-->settings-->editor-->file encoding ,見下圖,然后重啟idea就可以了。
2017.5.6
原文地址:https://www.cnblogs.com/hyyq/p/6818912.html