log4j-1.2.9. 在 tomcat5.5 下面的配置
拷貝 log4j-1.2.9.jar 到 \WEB-INF\lib 目錄下
?? 在 eclipse 的 java builder path 中增加 log4j-1.2.9.jar 引用是沒有用的
?? 在拷貝 log4j-1.2.9.jar 到 \WEB-INF\lib 下
?? tomcat 在啟動的時候需要自動查找這個目錄下面的 lib, 而 eclipse 的引用是在開發的使用使用 , 在沒有發布的情況下 ,tomcat 找不到這些類
建 commons-logging.properties 文件
在 \WEB-INF\classes 目錄下建 commons-logging.properties 文件
內容為
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4Jlogger
?
建 log4j.properties 文件
內容如下 在 \WEB-INF\classes 目錄下建 log4j.properties 文件
?
log4j.rootLogger= INFO,logfile,stdout
# 上面的 INFO 表示日志輸出的等級為 INFO
?
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - <%m>%n
?
log4j.appender.logfile= org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File= C : /eclipse/workspace/Recommend/Log/operation.log
log4j.appender.logfile.MaxFileSize= 512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex= 0
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout= org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= %d %p [%c] - %m%n
?
# If programmed properly the most messages would be at DEBUG
# and the least at FATAL.
log4j/log4e 的使用
Log4j 就是幫助開發人員進行日志輸出管理的 API 類庫。它最重要的特點就可以配置文件靈活的設置日志信息的優先級、日志信息的輸出目的地以及日志信息的輸出格式。
???? Log4j 除了可以記錄程序運行日志信息外還有一重要的功能就是用來顯示調試信息。
程序員經常會遇到脫離 java ide 環境調試程序的情況,這時大多數人會選擇使用 System.out
.println 語句輸出某個變量值的方法進行調試。這樣會帶來一個非常麻煩的問題:一旦哪天程序員決定不要顯示這些 System.out.println 的東西了就只能一行行的把這些垃圾語句注釋掉。若哪天又需調試變量值,則只能再一行行去掉這些注釋恢復 System.out.println 語句。
使用 log4j 可以很好的處理類似情況。 log4j 使用方法下面介紹的是 log4j 一些理論方面的知識
定義配置文件
首先使用配置文件將使我們的應用程序更加靈活配置 log 日志輸出方式包括輸出優先級、輸出目的地、輸出格式。 Log4j 支持兩種配置文件格式,一種是 XML 格式的文件,一種是 Java 特性文件 log4j.properties (鍵 = 值)。
下面將介紹使用 log4j.properties 文件作為配置文件的方法:
配置根 Logger
其語法為: log4j.rootLogger = [ level ] , appenderName, appenderName, …
l ???????? 輸出優先級別
[level] 是日志記錄的優先級 , 優先級分為 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者自定義的級別。
Log4j 建議只使用四個級別,優先級從高到低分別是 ERROR 、 WARN 、 INFO 、 DEBUG 。
通過在這里定義的級別,您可以控制到應用程序中相應級別的日志信息的開關。比如在這里定義了 INFO 級別,則應用程序中所有 DEBUG 級別的日志信息將不被打印出來。
l ???????? 輸出目的地
具體輸出地的輸出格式配置
l ???????? 輸出地類型的配置
? appenderName 就是指定日志信息輸出到哪個地方。可同時指定多個輸出目的地。
配置日志信息輸出目的地 Appender ,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
????????? log4j.appender.appenderName.option1 = value1 …
??? ??? log4j.appender.appenderName.option N = valueN
其中, Log4j 提供的 appender 有以下幾種:
org.apache.log4j.ConsoleAppender (控制臺),
org.apache.log4j.FileAppender (文件),
org.apache.log4j.DailyRollingFileAppender (每天產生一個日志文件),
??? ?????? org.apache.log4j.RollingFileAppender (文件大小到達指定尺寸的時候產生一個新的文件),
??? ?????? org.apache.log4j.WriterAppender (將日志信息以流格式發送到任意指定的地方)
l ???????? 配置日志信息的格式(布局)
其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
?????????? ?????? log4j.appender.appenderName.layout.option1 = value1 …
?????????? ?????? log4j.appender.appenderName.layout.option = valueN
其中, Log4j 提供的 layout 有以下幾種:
org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
?????????? ?????? org.apache.log4j.PatternLayout (可以靈活地指定布局模式),
?????????? ?????? org.apache.log4j.SimpleLayout (包含日志信息的級別和信息字符串),
?????????? ?????? org.apache.log4j.TTCCLayout (包含日志產生的時間、線程、類別等等信息)
?????????? ?????? Log4J 采用類似 C 語言中的 printf 函數的打印格式格式化日志信息,
打印參數如下:
%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 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。
舉例: Testlog4.main(TestLog4.java:10)
?
?
在代碼中使用 Log4j
l ???????? 獲取日志記錄器
? ???? 使用 Log4j ,第一步就是獲取日志記錄器,這個記錄器將負責控制日志信息。
其語法為:
public static Logger getLogger( String name)
通過指定的名字獲得記錄器,如果必要的話,則為這個名字創建一個新的記錄器。 Name 一般取本類的名字,比如:
?????? ?????? static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
l ???????? 讀取配置文件
?????????? 當獲得了日志記錄器之后,第二步將配置 Log4j 環境,
????????????? 其語法為: BasicConfigurator.configure () : 自動快速地使用缺省 Log4j 環境。
PropertyConfigurator.configure ( String configFilename) :
讀取使用 Java 的特性文件編寫的配置文件。
例: PropertyConfigurator.configure(".\\src\\log4j.properties")
DOMConfigurator.configure ( String filename ) :讀取 XML 形式的配置文件。
l ???????? 插入記錄信息(格式化日志信息)
當上兩個必要步驟執行完畢,就可輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
log4j 范例程序
下面將使用一個最簡單的范例程序來進一步說明 log4j 的使用方法。
程序代碼如下:
import org.apache.log4j.*;
public class LogTest {
? static Logger logger = Logger.getLogger(LogTest.class.getName());
? ?????????????????? ?????? public static void main(String[] args)
{
? PropertyConfigurator.configure ( “ .\\src\log4j.properties ” ) ;
ogger.debug("Debug ...");
logger.info("Info ...");
logger.warn("Warn ...");
logger.error("Error ...");
}
}
程序說明:
① static Logger logger = Logger.getLogger(LogTest.class.getName());
就是創建一個屬于 LogTest 類的 Logger 對象,創建時要告知 Logger 你當前的 Class 是什么。
? ② PropertyConfigurator.configure ( “ log4j.properties ” )
就是說使用當前工程目錄下的 src 文件夾中的 log4j.properties 文件作為配置文件。
若將 log4j.properties 放在工程根目錄下也可不寫此句,程序會自動找到配置文件。
? ③ logger.debug 就是輸出 debug 的信息,
logger.info 就是輸出提示信息,
logger.warn 就是顯示警告信息,
logger.error 就是顯示錯誤信息。
下面是配置文件 log4j.properties 的內容: log4j.rootLogger
log4j. rootLogger =DEBUG, stdout , R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log.txt log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss} %-5p %c - %m%n
?
程序說明:
l ???????? log4j. rootLogger =DEBUG, stdout , R
就是說我要顯示所有優先權等於和高于 Debug 的信息。 "stdout" ,” R ”表示我定義了兩個輸出端 ( 隨便什么名字都好 ) 。下面的三行說 stdout 輸出端其實是標準輸出 Console ,也就是屏幕。
l ???????? 輸出的格式是 PatternLayout 。轉換方式是 %5p (%F:%L) - %m%n ,
即前五格用來顯示優先權,再顯示當前的文件名,加當前的行數。
最后是 logger.debug() 或 logger.info() 或 logger.warn() 或 logger.error() 里的信息。
%n 表示回車空行。
再加上下面六行則 log 信息不光顯示在屏幕上,而且將被保存在一個叫 "log.txt" 的文件里,文件最大為 100KB 。如果文件大小超過 100KB ,文件會被備份成 "log.txt.1" ,新的 "log.txt" 繼續記錄 log 信息。接下來我們可以改變 log4j.properties ,而不需重新編譯就可以控制 log 信息是否顯示、 log 信息的輸出端類型、輸出方式、輸出格式,等等。
舉例如下:
在 log4j.properties 文件里把 "log4j. rootLogger =DEBUG,stdout,R"
改寫成 "log4j.rootCategory=OFF, stdout,R" ,這樣所有的 log 信息都不會顯示了;解決了本文開始提出的問題。
在 log4j.properties 文件里把 "log4j. rootLogger =DEBUG,stdout,R" 改寫成 "log4j.rootCategory=INFO, stdout,R" ,這樣只顯示 INFO, WARN, ERROR 的 log 信息,而 DEBUG 信息不會被顯示; 在 web 程序中使用 log4j 注意問題
1、 ? 由于 jsp 或 servlet 在執行狀態時沒有當前路徑概念,所有使用
PropertyConfigurator.configure ( String )語句找 log4j.properties 文件時要給出相對于
當前 jsp 或 servlet 的路徑轉化成為一個絕對的文件系統路徑。
方法是使用 servletcontext.getrealpath(string) 語句。
例: // 得到當前 jsp 路徑 String prefix = getServletContext().getRealPath("/");
// 讀取
log4j.properties PropertyConfigurator.configure(prefix+"\\WEB-INF\\log4j.properties");
?
2、 ? 相應的 log4j.properties 設置某個屬性時也要在程序中設置絕對路徑。
例: log4j.appender.R.File 屬性設置日志文件存放位置。
我們可以用讀寫 .properties 配置文件的方法進行靈活設置。
log4e 使用說明在了解了 log4j 的功能后
我們肯定會我們的程序中編寫一些 Log4j 日志記錄。
對于使用 Eclipse 的程序員 Log4e 將是我們最得力的 log4j 日志編寫助手,現在開始 Log4e 之旅。 Log4e 是一個免費的 Eclipse Plugin ,它可幫助你在你的 Java 工程中快速加入 Log ;我們可以在 http://log4e.jayefem.de/index.php/Download 網站上下載 Log4e 最新版本。
下載后將相應文件夾拷貝到 Eclipse 的插件目錄下,重新 Eclipse ,在首選項中會多出一個 Log4e 選項。 Log4e 可以有多個插入 Log 為一個方法、類,當然也可以在當前位置插入 Log ,
同時其也可以把 Sysout.out.println() 的轉換為 log ;所有的這一切只需要你點點鼠標或者按一次快捷鍵,下面我們只以為一個方法插入 Log 為例來講解在 Java 編輯上下文中點擊右鍵,
選擇 Log4E ,你將看到如下界面: 點擊 Insert Log Statement For This Method ,你將看到驗證頁面: Finish 后這時你將看到插入 Log 后的函數如下:
Log4e 更多的實例參照 http://log4e.jayefem.de
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
