准備工作 一
Tomcat已正確配置與使用
二
軟件下載
log
j
log
j
zip
Logj簡介 在強調可重用組件開發的今天
除了自己從頭到尾開發一個可重用的日志操作類外
Apache為我們提供了一個強有力的日志操作包
Log
j
Log
j是Apache的一個開放源代碼項目
通過使用Log
j
我們可以控制日志信息輸送的目的地是控制台
文件
GUI組件
甚至是套接口服務器
NT的事件記錄器
UNIX Syslog守護進程等
我們也可以控制每一條日志的輸出格式
通過定義每一條日志信息的級別
我們能夠更加細致地控制日志的生成過程
最令人感興趣的就是
這些可以通過一個配置文件來靈活地進行配置
而不需要修改應用的代碼
此外
通過Log
j其他語言接口
您可以在C
C++
Net
PL/SQL程序中使用Log
j
其語法和用法與在Java程序中一樣
使得多語言分布式系統得到一個統一一致的日志組件模塊
而且
通過使用各種第三方擴展
您可以很方便地將Log
j集成到J
EE
JINI甚至是SNMP應用中
本文介紹的Log
j版本是
怎樣通過一個配置文件來靈活地進行配置
主要的應用平台是Tomcat
Logj的配置 首先到jakarta下載一個log
j的組件
把jakarta
log
j
\dist\lib下的log
j
jar文件copy到classpath指定的目錄下!可以是Tomcat的common\lib目錄下
也可以是你需要用到log
j的application下的lib目錄
在Application目錄下的web
xml文件加入以後代碼
<servlet>
<servlet
name>log
j</servlet
name>
<servlet
class>com
apache
jakarta
log
j
Log
jInit</servlet
class>
<init
param>
<param
name>log
j</param
name>
<param
value>/WEB
INF/log
j
properties</param
value>
</init
param>
<load
on
startup>
</load
on
startup>
</servlet>
這段代碼的意思是說
在Tomcat啟動時加載com
apache
jakarta
log
j
Log
jInit這個名叫Log
jInit
class這個類文件
其中Log
jInit
class的源代碼如下
package com
apache
jakarta
log
j;
import org
apache
log
j
PropertyConfigurator;
import javax
servlet
http
HttpServlet;
import javax
servlet
http
HttpServletRequest;
import javax
servlet
http
HttpServletResponse;
public class Log
jInit extends HttpServlet {
public void init() {
String prefix = getServletContext()
getRealPath(
/
);
String file = getInitParameter(
log
j
);
// if the log
j
init
file is not set
then no point in trying
System
out
println(
log
j start
);
if(file != null) {
Propnfigure(prefix+file);
}
}
public void doGet(HttpServletRequest req
HttpServletResponse res) {
}
}
這段代碼很簡單
可以看出
在加載的過程中
程序會讀取/WEB
INF/log
j
properties這個文件
這個文件就是本文的重點
也就是log
j的配置文件
# Set root logger level to DEBUG and its only appender to A
#log
j中有五級logger
#FATAL
#ERROR
#WARN
#INFO
#DEBUG
#配置根Logger
其語法為
#log
j
rootLogger = [ level ]
appenderName
appenderName
…
log
j
rootLogger=INFO
A
R
#這一句設置以為著所有的log都輸出
#如果為log
j
rootLogger=WARN
則意味著只有WARN
ERROR
FATAL
#被輸出
DEBUG
INFO將被屏蔽掉
# A
is set to be a ConsoleAppender
#log
j中Appender有幾層如控制台
文件
GUI組件
甚至是套接口服務器
NT的事件記錄器
UNIX Syslog守護進程等
#ConsoleAppender輸出到控制台
log
j
appender
A
=org
apache
log
j
ConsoleAppender
# A
使用的輸出布局
其中log
j提供
種布局
org
apache
log
j
HTMLLayout(以HTML表格形式布局)
#org
apache
log
j
PatternLayout(可以靈活地指定布局模式)
#org
apache
log
j
SimpleLayout(包含日志信息的級別和信息字符串)
#org
apache
log
j
TTCCLayout(包含日志產生的時間
線程
類別等等信息)
log
j
appender
A
layout=org
apache
log
j
PatternLayout
#靈活定義輸出格式 具體查看log
j javadoc org
apache
log
j
PatternLayout
#d 時間
log
j
appender
A
layout
ConversionPattern=%
d{yyyy
MM
dd HH:mm:ss} [%c]
[%p] %m%n
#R 輸出到文件 RollingFileAppender的擴展
可以提供一種日志的備份功能
log
j
appender
R=org
apache
log
j
RollingFileAppender
#日志文件的名稱
log
j
appender
R
File=log
j
log
#日志文件的大小
log
j
appender
R
MaxFileSize=
KB
# 保存一個備份文件
log
j
appender
R
MaxBackupIndex=
log
j
appender
R
layout=org
apache
log
j
TTCCLayout
#log
j
appender
R
layout
ConversionPattern=%
d{yyyy
MM
dd HH:mm:ss} [%c]
[%p] %m%n
配置以這裡就差不多了
如果你想更深入了解配置文件的各個細節
可以去查看docs
還有
在文章的最後面我們提供配置文件中一些主要的語法
下面我們來看看怎樣在程序中使用log
j
Logj的使用 使用Log
j
第一步就是獲取日志記錄器
這個記錄器將負責控制日志信息
其語法為
public static Logger getLogger( String name)
必須在使用前要把這個類導入
import org
apache
log
j
Logger;
name一般是類文件的名字
如下
static Logger logger = Logger
getLogger (
class
getName () ) ;
您就可以輕松地使用不同優先級別的日志記錄語句插入到您想記錄日志的任何地方
其語法如下
logger
debug ( Object message ) ;
( Object message ) ;
logger
warn ( Object message ) ;
logger
error ( Object message ) ;
為什麼這裡要分級別的呢?試想一下
我們在寫程序的時候
為了調試程序
會在很多會出錯的地方加入大量的();信息
當然程序調試完畢
我們不需要這些輸出信息了
那怎麼辦呢?以前的做法是把每個程序中的刪除
但這是不現實的
如果程序不大還可以
但如果程序很多
做這些事情就很煩人了
但因為log
j分級別了
當我們不需要輸出這樣調試時用到的()時
我們可以把輸出的級別調高
如調到warn
或error級別
這樣info級別及以下的級別就不會出輸出了
是不是很方便的呢?
其實除了這種使用方式
log
j還有其它的使用方面
不需要配置文件
直接在程序中定義輸入出級別
層次等信息
如果要了解這方法的使用
可以參考文檔
附注 以下是配置文件的一些重要的語法
定義配置文件
其實您也可以完全不使用配置文件
而是在代碼中配置Log
j環境
但是
使用配置文件將使您的應用程序更加靈活
Log
j支持兩種配置文件格式
一種是XML格式的文件
一種是Java特性文件(鍵=值)
下面我們介紹使用Java特性文件做為配置文件的方法
配置根Logger
其語法為
log
j
rootLogger = [ level ]
appenderName
appenderName
…
其中
level 是日志記錄的優先級
分為OFF
FATAL
ERROR
WARN
INFO
DEBUG
ALL或者您定義的級別
Log
j建議只使用四個級別
優先級從高到低分別是ERROR
WARN
INFO
DEBUG
通過在這裡定義的級別
您可以控制到應用程序中相應級別的日志信息的開關
比如在這裡定義了INFO級別
則應用程序中所有DEBUG級別的日志信息將不被打印出來
appenderName就是指定日志信息輸出到哪個地方
您可以同時指定多個輸出目的地
配置日志信息輸出目的地Appender
其語法為
log
j
appender
appenderName = fully
qualified
name
of
appender
class
log
j
appender
appenderName
option
= value
…
log
j
appender
appenderName
option = valueN
其中
Log
j提供的appender有以下幾種
org
apache
log
j
ConsoleAppender(控制台)
org
apache
log
j
FileAppender(文件)
org
apache
log
j
DailyRollingFileAppender(每天產生一個日志文件)
org
apache
log
j
RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org
apache
log
j
WriterAppender(將日志信息以流格式發送到任意指定的地方)
//往數據庫中加入日志
log
j
appender
R=org
apache
log
j
jdbc
JDBCAppender
log
j
appender
R
URL=jdbc:mysql://localhost/log
log
j
appender
R
username=root
log
j
appender
R
password=
log
j
appender
R
sql=INSERT INTO TEST (msg) VALUE (
%d
%c
&m
)
log
j
appender
R
layout=org
apache
log
j
PatternLayout
配置日志信息的格式(布局)
其語法為
log
j
appender
appenderName
layout = fully
qualified
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28002.html