天天看點

log4j學習

由于本人的開發經驗有限,能力有限,是以難免會有很多不足之處,是以希望大家可以一起交流學習!以前總是system.out.println();現在開發需要寫日志了!是以就簡單的學習了一下,log4j是最常用的一個日志記錄apache的開源項目。這裡我隻簡單的減少一下,同時會上傳一些文檔和demo,您需要的話可以自己下載下傳來看看,其實很多文檔都是差不多的。

1.為什麼要用log4j;

開發一個系統的時候,總會System.out.println()來列印一些資訊,但這些語句在系統穩定之後,就沒有作用了,成了垃圾代碼。Log4j就可以解決這個問題。

2.Log4j的處理過程

你可以使用Log4j來代替系統中輸出語句,當你系統穩定之後,隻要修改配置檔案,就可以不顯示列印資訊了。

3 ,在應用系統的維護過程中,應用程式運作時所記錄的日志對維護工作起着至關重要

的作用,應用日志常常可以讓我們友善快速的定位到故障或BUG的所在。

4.無論是開源項目還是商業項目,LOG4J在事實上都成為了大多數程式員的選擇,因

為其配置簡單,使用友善,功能強大,能生成各種格式或各種類型的日志,并且可以将

日志寫到檔案、資料庫、網絡等目的地。

5.在對Logger執行個體進行命名時,沒有限制,可以取任意自己感興趣的名

字。一般情況下建議以類的所在位置來命名Logger執行個體,這是目前來講比較有

效的Logger命名方式。這樣可以使得每個類建立自己的日志資訊,便于管理。

比如:

staticLoggerlogger= Logger.getLogger(ClientWithLog4j.class.getName());

6. Log4J對應用性能的影響

如果在程式運作中輸出大量日志,顯然會對應用的性能造成一定的影響。Log4J

對性能的影響取決于以下因素:

·日志輸出目的地:輸出到控制台的速度和輸出到檔案系統的速度是不一樣

的。

·日志輸出格式:格式簡單,速度也更快。

·日志級别:日志級别設定的越低,輸出的日志内容越多,對性能的影響也

越大。

7.

在應用程式中添加日志記錄總的來說基于三個目的:

<1>.監視代碼中變量的變化情況,周期性的記錄到檔案中供其他應用進行統計分析工作;

<2>.跟蹤代碼運作時軌迹,作為日後審計的依據;

<3>.擔當內建開發環境中的調試器的作用,向檔案或控制台列印代碼的調試資訊。

8. #将DAO層log 記錄到DAOLog,allLog中

log4j.logger.DAO=DEBUG,A2,A4

#将邏輯層log記錄到BusinessLog,allLog 中

log4j.logger.Businesslog=DEBUG,A3,A4

9. 任何logging API 與簡單的System.out.println輸出調試資訊方法比較,最主要的優點在于它能夠關閉一些調試資訊輸出而不影響其他人的調試。

**************************************************************************

1.隻輸出到控制台

#此屬性指定日志等級,stdout為輸出的目的地

log4j.rootCategory = info,stdout

#指定com.log.test.LogTest這個類可以輸出debug級别的日志

log4j.logger.com.log.test.LogTest = Debug

#輸出的目的地為控制台

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

#指定輸出日志的布局類型

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

#日志的一些具體資訊

log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n

2.輸出到檔案中

#此屬性指定日志等級,stdout,logfile為輸出的目的地

log4j.rootCategory = info,logfile

#輸出目的地類型為檔案

log4j.appender.logfile=org.apache.log4j.FileAppender

#檔案名為LogTest.log

log4j.appender.logfile.File=LogTest.log

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - <%m>%n

3.當日志檔案大于100M時從新生成一個新的

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.Append=true

#設定日志檔案的最大存儲量

log4j.appender.logfile.MaxFileSize=100MB

4.每天生成一個日志檔案

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

*************************************************************************

在程式中怎麼用的呢?~

1.你要導入兩個jar包

<a href="http://blog.51cto.com/attachment/201201/135254887.png" target="_blank"></a>

2.在src中寫一個配置檔案,名字為:log4j.properties.

内容可以為上面四種情況的任意一種!你可以把日志輸出控制台,或輸出到檔案中或者定義檔案大小,是否每天産生一個新的日志檔案等等。常用的也就這四種!具體的你可以根據文檔自己搭配。我這裡就不多說了!文檔我會上傳到下載下傳裡!名字:log4j-2012

3.具體程式中如何用的

package com.log.test;

import org.apache.log4j.Logger;

public class LogTest {

static Logger logger = Logger.getLogger(LogTest.class.getName());

public static void main(String[] args) {

//擷取Logger執行個體,參數為本類

//Logger logger = Logger.getLogger(LogTest.class);

//輸出一段DEBUG資訊

logger.debug("2debuging");

//輸出一段INFO資訊

logger.info("info2....");

//輸出一段ERROR資訊

logger.error("error2....");

int a = 0;

try {

int b = 4/a;

} catch (Exception e) {

logger.debug("大哥,bbbbbbbbbbbbbb有bug啊");

}

這樣你執行這個main方法就可以了!當然,若是在一個web project中,那你啟動工程,該執行日志時就執行了!!

注意:也許你忘記了再java project中如何導入jar包的問題。見下圖

<a href="http://blog.51cto.com/attachment/201201/140003422.png" target="_blank"></a>

good luck .. good good study ,day day up ...

#########################################################

2013-06-23-add-han-如果你想輸入到控制台和檔案

<code>log4j.rootCategory = info,stdout,logfile,errorfile</code>

<code>log4j.logger.com.log.test.LogTest = Debug</code>

<code>log4j.logger.com.log.test.LogTest1 = Debug</code>

<code>log4j.appender.stdout=org.apache.log4j.ConsoleAppender</code>

<code>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</code>

<code>log4j.appender.stdout.layout.ConversionPattern=%d %p [%C.%M(%L)] - &lt;%m&gt;%n</code>

<code>#log4j.rootCategory = info,logfile,</code>

<code>log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender</code>

<code>log4j.appender.logfile.File=D:/LogTest.log</code>

<code>log4j.appender.logfile.layout=org.apache.log4j.PatternLayout</code>

<code>log4j.appender.logfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - &lt;%m&gt;%n</code>

<code>#所有的錯誤資訊輸入到D:/ErrorLogTest.log中</code>

<code>log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender</code>

<code>log4j.appender.errorfile.File=D:/ErrorLogTest.log</code>

<code>log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout</code>

<code>log4j.appender.errorfile.Threshold=ERROR</code>

<code>log4j.appender.errorfile.layout.ConversionPattern=%d %p [%C.%M(%L)] - &lt;%m&gt;%n</code>

<a href="http://blog.jobbole.com/51155/" target="_blank">這篇關于日志的文章寫的很不錯,可以讀讀。</a>

<a href="http://blog.csdn.net/azheng270/article/details/2173430" target="_blank">可以參考的文章。2014-04-21-add</a>

<a href="http://www.blogjava.net/zhb8015/articles/382624.html" target="_blank">2014-04-22-可以參考一下此文章。</a>

<code>#log4j.rootLogger=trace, stdout,logfile,errorfile</code>

<code>#log4j.rootLogger=debug, stdout,logfile</code>

<code>log4j.rootLogger=info, stdout,logfile,errorfile</code>

<code>#1.console</code>

<code>#log4j.appender.stdout.Threshold=info</code>

<code>#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - &lt;%m&gt;%n</code>

<code>#2.file</code>

<code>log4j.appender.logfile=org.apache.log4j.FileAppender</code>

<code>log4j.appender.logfile.File=${catalina.home}/logs/log.log</code>

<code>log4j.appender.logfile.Append=true</code>

<code>log4j.appender.logfile.Threshold = DEBUG</code>

<code>#3.errorfile</code>

<code>log4j.appender.errorfile.File=${catalina.home}/logs/logerror.log</code>

<code>log4j.appender.errorfile.DatePattern = '.'yyyy-MM-dd-HH-mm</code>

<code>log4j.appender.errorfile.Append=true</code>

<code>package</code> <code>com.book.web.controller;</code>

<code>import</code> <code>org.apache.commons.logging.Log;</code>

<code>import</code> <code>org.apache.commons.logging.LogFactory;</code>

<code>import</code> <code>org.apache.log4j.Logger;</code>

<code>/**</code>

<code> </code><code>* log4j1測試</code>

<code> </code><code>* @author liweihan</code>

<code> </code><code>* http://hanchaohan.blog.51cto.com/2996417/759111</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>TestLog4j1Log {</code>

<code>    </code> 

<code>    </code><code>/**</code>

<code>       </code><code>1.引入jar包</code>

<code>       </code><code>&lt;dependency&gt;</code>

<code>          </code><code>&lt;groupId&gt;log4j&lt;/groupId&gt;</code>

<code>          </code><code>&lt;artifactId&gt;log4j&lt;/artifactId&gt;</code>

<code>          </code><code>&lt;version&gt;1.2.9&lt;/version&gt;</code>

<code>        </code><code>&lt;/dependency&gt;</code>

<code>        </code> 

<code>        </code><code>2.在resources中加入log4j.properties檔案。</code>

<code>          </code><code>Logger.getLogger(TestLog4j1Log.class)預設到類路徑下加載log4j.properties配置檔案</code>

<code>              </code><code>如果log4j.properties配置檔案不在類路徑下,則可以選擇如下方式之一來加載配置檔案</code>

<code>              </code> 

<code>          </code><code>&lt;1.&gt;使用classLoader來加載資源</code>

<code>                </code><code>PropertyConfigurator.configure(Log4jTest.class.getClassLoader().getResource("properties/log4j.properties"));</code>

<code>          </code><code>&lt;2.&gt;使用log4j自帶的Loader來加載資源</code>

<code>              </code><code>PropertyConfigurator.configure(Loader.getResource("properties/log4j.properties"));</code>

<code>         </code><code>3.如果要commons-logging和log4j一起使用,還需要引入jar包:</code>

<code>         </code><code>【https://my.oschina.net/pingpangkuangmo/blog/407895】</code>

<code>             </code><code>同時擷取log的方式為:</code>

<code>             </code><code>private static Log logger = LogFactory.getLog(TestLog4j1Log.class);</code>

<code>           </code><code>&lt;dependency&gt;</code>

<code>              </code><code>&lt;groupId&gt;commons-logging&lt;/groupId&gt;</code>

<code>              </code><code>&lt;artifactId&gt;commons-logging&lt;/artifactId&gt;</code>

<code>              </code><code>&lt;version&gt;1.2&lt;/version&gt;</code>

<code>            </code><code>&lt;/dependency&gt;</code>

<code>            </code> 

<code>        </code><code>4.log4j1和slf4j進行內建的話,還需要引入jar包</code>

<code>        </code><code>&lt;dependency&gt;</code>

<code>          </code><code>&lt;groupId&gt;org.slf4j&lt;/groupId&gt;</code>

<code>          </code><code>&lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;</code>

<code>          </code><code>&lt;version&gt;1.7.7&lt;/version&gt;</code>

<code>          </code><code>&lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;</code>

<code>        </code><code>Logger logger=LoggerFactory.getLogger(TestLog4j1Log.class);</code>

<code>        </code><code>slf4j的Logger是slf4j定義的接口,而log4j的Logger是類。</code>

<code>        </code><code>LoggerFactory是slf4j自己的類</code>

<code>     </code><code>*/</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>Logger logger = Logger.getLogger(TestLog4j1Log.</code><code>class</code><code>);</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code><code>if</code> <code>(logger.isDebugEnabled()) {</code>

<code>            </code><code>logger.debug(</code><code>" ====== log4j debug meassage"</code><code>);</code>

<code>        </code><code>}</code>

<code>        </code><code>if</code> <code>(logger.isInfoEnabled()) {</code>

<code>            </code><code>logger.info(</code><code>" ====== log4j info message "</code><code>);</code>

<code>    </code><code>}</code>

<code>}</code>

java自帶的log日志

<code>import</code> <code>java.util.logging.Logger;</code>

<code> </code><code>* jdk自帶的logging</code>

<code> </code><code>*</code>

<code>public</code> <code>class</code> <code>TestJDKLog {</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>Logger logger = Logger.getLogger(TestJDKLog.</code><code>class</code><code>.getName());</code>

<code>        </code><code>預設是jre目錄下的lib/logging.properties檔案,</code>

<code>        </code><code>logger.info(</code><code>" ====== jdk logging info : a msg"</code><code>);</code>

<code></code>

     本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/759111,如需轉載請自行聯系原作者