1. 程式人生 > >Log4j 入門概念理解

Log4j 入門概念理解

java log4j

Log4j入門
1、添加Log的目的:
監視代碼中變量的變化情況,周期性的記錄到文件中供其他應用進行統計分析工作
跟蹤代碼的運行軌跡,作為日後審計的依據
擔當繼承開發環境中的調試器作用,向文件或控制臺打印代碼的調試信息。
最普通的做法就是在代碼中嵌入許多的打印語句,這些打印語句可以輸出到控制臺或文件中,比較好的做法就是構造一個日誌操作類來封裝此類的操作。

2、Log4j是Apache 的一個開放源代碼項目,它是一個開源的、輕量級的、用於日誌管理的框架。我們可以用它控制日誌信息輸送的目的地是控制臺、文件、GUI組件、
甚至是socket服務器、NT的事件記錄器、Unix Syslog

可以控制每一條日誌的輸出格式;
定義每一條日誌信息的級別,以便更加細致地控制日誌的生成過程。
通過一個配置文件來靈活地配置。
另外,它支持C\C++\Net、PL/SQL .

3、主要功能:
- 日誌信息的輸出格式,日誌信息的優先級,日誌信息的輸出目的地。優先級指明這條日誌信息的重要程度,目的地則是保存log的位置,輸出格式控制了日誌信息的顯示內容。

4、日誌類別的層次結構(Loggers)
Log4j 相對於print的優點在於 在禁用一些特定的信息輸出的同時不妨礙其他信息的輸出的能力。這個能力源自於日誌命名空間。
Logger被指定為實體,Logger的名字是大小寫敏感的,他們遵循以下的命名語法規則:用“.”來劃分層次級別


5、日誌級別:trace、 debug、 info、 warn、 error、 fatal

6、幾個重要規則
- 級別的控制:指的是大於當前級別的Log都要輸出,而不是等於
- 如果有多個logger,都可以匹配輸出,則每個logger都產生輸出,其中根logger匹配所有的輸出,而級別控制來源於路徑最詳細的logger

7、使用:
private static Logger logger = Logger.getLogger(A.class);

8、輸出源:
Log4j 允許日誌請求被輸出到多個輸出源,比如控制臺、文件等。Log4j中叫做Appender。
一個Logger可以設置超過一個appender.


常用Appender
ConsoleAppender、FileAppender、DailyRollingFileAppender(每天產生一個日誌文件)
RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
WriterAppender(將日誌信息以流格式發送到任意指定的地方)
JDBCAppender(把日誌用JDBC記錄到數據庫中)

10、布局Layout
指的就是輸出信息的格式。

常用Layout:
HTMLLayout(以HTML表格形式布局)
PatternLayout(可以靈活地指定布局模式)
SimpleLayout(包含日誌信息的級別和信息字符串)
TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

常用patternLayout:
%m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的線程名
%n 輸出一個回車換行符,Windows平臺為“\r\n”,Unix平臺為“\n”
%d 輸出日誌時間點的日期或時間,默認格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數

11、配置示例:
兩種配置方式:xml格式 和 properties格式
例子:
log.4j.appender.javass.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.javass.File.file = javass.log
log4j.appender.javass.File.Datapattern=.yyyy-MM-dd
log4j.apender.javass.File.layout=org.apache.log4j.PatternLayout
log4j.appender.javass.File.layout.Conversionpattern=%d{HH:mm:ss,SSS} %5p(%C{1}:%M) - %m%n
log4j.logger.cn.javass=debug

每個Appender都要有自己的Layout
每個Logger都可以指定一個級別,同時引用多個Appender;而一個Appender也可以被多個Logger引用。

xml配置示例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<RollingFile name="file" fileName="log/regd.log" filePattern="log/regd.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d [%-5p] (%t) %c{3}#%M - %m%ex{8}%n" />
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="info" />
<param name="levelMax" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appenders>
</configuration>


log4j.xml 會優先於log4j.properties被使用

可以通過logger的additivity=“false”屬性,來設置多個logger是否重復輸出同一條信息
<logger name="cn.javass1" additivity="false">
<level value="debug" />
<appender-ref ref="log.console" />
<appender-ref ref="log.file" />
</logger>



JDK 內置日誌系統:
java.util.logging\ jre/lib/logging.properties 裏面有詳細的參數意義說明。

private static final Logger logger = LoggerFactory.getLogger(“cn.javass.Test”);


本文出自 “技術生活” 博客,請務必保留此出處http://6621180.blog.51cto.com/6611180/1923705

Log4j 入門概念理解