使用Log4j - Java异常处理
生活随笔
收集整理的這篇文章主要介紹了
使用Log4j - Java异常处理
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*** Log4j是目前最流行的一種日志框架* 它有兩個版本:* 1.x: Log4j* 2.x: Log4j2* Log4j是一個組件化設(shè)計的日志系統(tǒng)* 它是通過append把不同的log輸出到不同的目的地* 例如Console是輸出到屏幕,File是輸出到文件,Socket是輸出到遠程* Filter是過濾哪些log是需要被輸出,哪些log是不需要被輸出,* Layout是用來格式化日志的信息,我們在實際使用的時候,并不需要關(guān)系Log4j內(nèi)部的API* 而是通過配置文件來配置他* Commons Logging可以自動的使用Log4j,如果在classpath中,存在Log4j,* Commons Logging就會自動使用Log4j,所以我們始終使用Commons Logging來寫日志* 在開發(fā)階段我們不需要使用Log4j* 我們只需要把正確的配置文件和相關(guān)的jar包放入classpath文件就可以了* 我們使用配置文件可以靈活的修改日志,而無需修改代碼* * commons-logging-1.1.2.jar,以及l(fā)og4j的三個jar包* log4j-jcl-2.6.1* @author Leon.Sun**/
public class Log4jDemo {}
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/*** 這個時候我們注意到Commons Logging在classpath自動發(fā)現(xiàn)log4j的jar包* 他就會直接使用log4j,這個時候我們看到的日志就是log4j打印的,這個時候我們看到的* 日志是由console打印的,也就是只有輸出到console的日志會打印在console的輸出中* * 通過Commons Logging實現(xiàn)日志,不需要修改代碼即可使用Log4j* 我們使用Log4j只需要把log4j2.xml和相關(guān)的jar放入classpath* 如果我們要更換Log4j,只需要移除log4j2.xml和相關(guān)的jar* 只有在我們需要擴展log4j的時候,我們猜需要引用log4j的接口* @author Leon.Sun**/
public class Test {static final Log log = LogFactory.getLog(CommonsLogging.class);public static void main(String[] args) {Person p = new Person("Xiao Ming");log.error("call hello(): " + p.hello());try {new Person(null);} catch (Exception e) {log.error("Exception when create person.",e);}log.info("Program end.");}}
log4j2.xml完美配置
https://blog.51cto.com/1197822/2157668log4j2配置文件log4j2.xml詳解(轉(zhuǎn)載)
https://www.cnblogs.com/new-life/p/9246143.html將log4j.xml修改為log4j2.xml
https://blog.csdn.net/weixin_42522453/article/details/83819983
<!-- 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><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.6.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-jcl</artifactId><version>2.6.2</version></dependency>
<?xml version="1.0" encoding="UTF-8"?>
<!-- 根節(jié)點是一個Configuration --><Configuration status="WARN"><Properties><!-- 日志文件默認輸出格式,不帶行號輸出(行號顯示會影響日志輸出性能);%C:大寫,類名;%M:方法名;%m:錯誤信息;%n:換行 --><!-- 這種定義如何打印日志的格式, --><property name="log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M - %m%n</property><!-- 日志默認切割的最小單位 --><property name="every_file_size">20MB</property><!-- Info日志默認同一文件夾下可以存放的數(shù)量,不設(shè)置此屬性則默認為7個 --><property name="info_max">10</property><!-- 日志默認同類型日志,同一文件夾下可以存放的數(shù)量,不設(shè)置此屬性則默認為7個 --><property name="rolling_max">50</property><!-- Info日志默認存放路徑(Info級別日志) --><property name="file.all.filename">log/all.log</property><!-- Info日志默認壓縮路徑,將超過指定文件大小的日志,自動存入按"年月"建立的文件夾下面并進行壓縮,作為存檔 --><property name="file.all.pattern">log/all.%i.log.gz</property><!-- Error日志默認存放路徑(Error級別日志) --><property name="file.err.filename">log/err.log</property><!-- Error日志默認壓縮路徑,將超過指定文件大小的日志,自動存入按"年月"建立的文件夾下面并進行壓縮,作為存檔 --><property name="file.err.pattern">log/err.%i.log.gz</property></Properties><Appenders><!-- 第一個appender是console,也就是屏幕 --><Console name="console" target="SYSTEM_OUT"><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/></Console><!-- 我們定義了一個RollingFile的appender,它的name是all,我們引用了fileName的屬性,是我們定義的file.all.filename --><RollingFile name="all" bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.all.pattern}"><PatternLayout pattern="${log.pattern}"/><!-- 我們在Policies中定義了一個TriggerPolicy,這個Policy的意思就是每當文件大小達到20M的時候,他就會自動切割,然后生成一個新的log文件 --><Policies> <SizeBasedTriggeringPolicy size="${every_file_size}"/></Policies><!-- 設(shè)置同類型日志,同一文件夾下可以存放的數(shù)量,如果不設(shè)置此屬性則默認存放7個文件 --><DefaultRolloverStrategy max="${info_max}" /></RollingFile><!-- 最后一個appender也是一個rollingFile appender,他的name是err --><RollingFile name="err" bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.err.filename}"><PatternLayout pattern="${log.pattern}"/><Policies> <SizeBasedTriggeringPolicy size="${every_file_size}"/></Policies><DefaultRolloverStrategy max="${info_max}" /></RollingFile></Appenders><!-- 然后定義logger,只有定義了logger并引入的appender,appender才會生效 --><Loggers><!--建立一個默認的root的logger--><!-- 我們先定義了roo log,它的level是info,我們把它關(guān)聯(lián)到三個appender中,分別是console,all,err,我們對err的level設(shè)置error,是所有的error錯誤都會記錄到err這個appender中 --><root level="info"><appender-ref ref="console" level="info"/><appender-ref ref="all" level="info"/><appender-ref ref="err" level="error"/></root><!-- 我們可以給一個包的log指定一個level是debug,就是所有debug級別的都會記錄到console中 --><!-- <logger name="com.learn.logging" level="debug"><appender-ref ref="console"/></logger> --></Loggers></Configuration>
?
總結(jié)
以上是生活随笔為你收集整理的使用Log4j - Java异常处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Commons Logging -
- 下一篇: log4j2.xml