<!--
Struts Chapter 9 Log4j(系統運行時的狀態記錄日誌)
Goal:能夠給自己的做的系統寫一個系統運行的狀態日誌記錄,便於以後系統的維護!
當然,也是爲了學Hibernate打好基礎!然後呢~這個呢,也沒什麼好說的~我就直接把前輩
們總結好的東西直接就貼上來了~呵呵~又懶了一次!
-->
一,首先是向sir給我們的log4j.properties的標準版,然後我自己加了一點註釋,然後其中的各個參數將會在第二點中講到!
然後就是不能忘了必需的包:commons-logging.jar&log4j.jar
#等號後面是別名,要在記錄日誌的地方用
log4j.rootLogger=ALL,CONSOLE,FILE,ROLLING_FILE,MAIL,A1,DATABASE
###################
# Console Appender 在控制檯輸出的
###################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n
#####################
# File Appender 輸出到文件中
#####################
log4j.appender.FILE=org.apache.log4j.FileAppender
#log4j.appender.FILE.Threshold=ERROR
log4j.appender.FILE.File=c\:\\a\\file.html
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# Rolling File 回滾文件
########################
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
#log4j.appender.ROLLING_FILE.Threshold=DEBUG
log4j.appender.ROLLING_FILE.File=c\:\\a\\rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.ROLLING_FILE.MaxFileSize=5KB
#備份文件個數
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
########################
# DailyRollingFile 每日產生一個日誌文件
#######################
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=c:\\a\\SampleMessages.log4j
log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j'
log4j.appender.A1.layout=org.apache.log4j.HTMLLayout
########################
# SMTP Appender(發送到email-需要用戶名和密碼,還要有javamail.jar,dsn.jar,imap.jar,mailapi.jar,pop3.jar,smtp.jar包)
#######################
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
### 錯誤級別
##log4j.appender.MAIL.Threshold=FATAL
## 緩存文件大小,日誌達到10K時發送Email
#log4j.appender.MAIL.BufferSize=10
#[email protected]
#log4j.appender.MAIL.SMTPHost=smtp.163.com
#log4j.appender.MAIL.SMTPUsername=wisdom_xw
#log4j.appender.MAIL.SMTPPassword=密碼
### 郵件主題
#log4j.appender.MAIL.Subject=Messsage From LOG4J
#[email protected]
#注意:下面的layout=後面的值要是women寫的解決轉碼問題的類,eg:com.shu.util.MyPattern
#log4j.appender.MAIL.layout=com.shu.util.MyPattern
#log4j.appender.MAIL.layout.ConversionPattern=[ErrorMessage] %d - %c -%-4r [%t] %-5p %c %x - %m%n
##郵件中,內容包含中文的處理方式
#public class MyPatternLayout extends PatternLayout {
# @Override
# public String getContentType() {
# return "text/html;CHARSET=utf8"; //設定字符集 #
# }
#}
#當佈局是HTML時(該類位於com.shu.util.MyPattern)
#public class MyPattern extends HTMLLayout{
# @Override
# public String getContentType() {
# return "text/html;CHARSET=utf-8"; //設定字符集 #
# }
#}
########################
# JDBC Appender 放入到DBSM中(需要jdbc驅動)(注意,系統默認沒有處理單引號問題,暈~突然想不起這個是怎麼處理的了)
#######################
log4j.appender.DATABASE=BPSJDBCAppender
log4j.appender.DATABASE.Threshold=all
log4j.appender.DATABASE.URL=jdbc:sqlserver://localhost:1433;databaseName=testdb
log4j.appender.DATABASE.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
log4j.appender.DATABASE.user=sa
log4j.appender.DATABASE.password=123456
log4j.appender.DATABASE.sql=INSERT INTO error_msg VALUES ('%d - %c -%-4r [%t] %-5p %c %x - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#只記得要寫這個方法!
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.spi.LoggingEvent;
#public class BPSLoggingEvent extends LoggingEvent {
# public BPSLoggingEvent(String fqnOfCategoryClass, Category logger, Priority level, Object message, Throwable throwable) {
# super(fqnOfCategoryClass, logger, level, message, throwable);
# // TODO Auto-generated constructor stub
# }
# public String getThreadName() {
# // TODO Auto-generated method stub
# String thrdName=super.getThreadName();
# if(thrdName.indexOf("'")!=-1){
# thrdName=thrdName.replaceAll("'", "''");
# }
# return thrdName;
# }
# public String getRenderedMessage() {
# String msg=super.getRenderedMessage();
# if(msg.indexOf("'")!=-1){
# msg=msg.replaceAll("'", "''");
# }
# return msg;
# }
#}
#還有這個方法
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.spi.LoggingEvent;
#import org.apache.log4j.Category;
#import org.apache.log4j.Priority;
#import org.apache.log4j.jdbc.JDBCAppender;
#import org.apache.log4j.spi.LoggingEvent;
#
#public class BPSJDBCAppender extends JDBCAppender {
# protected String getLogStatement(LoggingEvent event) {
# String fqnOfCategoryClass = event.fqnOfCategoryClass;
# Category logger = Category.getRoot();
# Priority level = event.level;
# Object message = event.getMessage();
# Throwable throwable = null;
# BPSLoggingEvent bEvent = new BPSLoggingEvent(fqnOfCategoryClass,
# logger, level, message, throwable);
# return super.getLogStatement(bEvent);
# }
#}
二,log4j.properties中各個參數的講解
//-----------------------大體上------------------------------
#log4j.rootLogger=輸出級別(all<debug<info<error),輸出位置(動態參數)
#設置輸出具體的位置
#log4j.appender.別名=ConsoleAppender(控制檯)\FileAppender(文件中)
#DailyRollingFileAppender(每日一個文件)\SMTPAppender(發送郵件)\BPSJDBCAppender(數據庫中)
#設置輸出級別
#log4j.appender.別名.Threshold=可選值(all<debug<info<error)
#設置輸出文件的格式
#log4j.appender.別名.layout=PatternLayout(普通文本格式)、HTMLLayout(HTML格式)
#設置日誌的具體內容(使用特殊符號代替,詳細見書:p174)
#log4j.appender.ABC.layout.ConversionPattern=%F %L %d等等
//--------------------------------------------------------------
輸出級別的種類
ERROR、WARN、INFO、DEBUG
ERROR 爲嚴重錯誤 主要是程序的錯誤
WARN 爲一般警告,比如session丟失
INFO 爲一般要顯示的信息,比如登錄登出
DEBUG 爲程序的調試信息
配置日誌信息輸出目的地
log4j.appender.appenderName = fully.qualified.name.of.appender.class
1.org.apache.log4j.ConsoleAppender(控制檯)
2.org.apache.log4j.FileAppender(文件)
3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
配置日誌信息的格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
2.org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
控制檯選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
Target=System.err:默認情況下是:System.out,指定輸出控制檯
FileAppender 選項
Threshold=DEBUF:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
RollingFileAppender 選項
Threshold=DEBUG:指定日誌消息的輸出最低層次。
ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日誌信息格式中幾個符號所代表的含義:
-X號: X信息輸出時左對齊;
%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c: 輸出日誌信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日誌事件的線程名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%"字符
%F: 輸出日誌消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日誌具體信息
%n: 輸出一個回車換行符,Windows平臺爲"\r\n",Unix平臺爲"\n"輸出日誌信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉
三,使用java代碼記錄日誌
[代碼中使用]
public class TestLog4j {
public static void main(String[] args) {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
Logger logger = Logger.getLogger(TestLog4j. class );
logger.debug( " debug " );
logger.error( " error " );
....
}
}
<!--
Author:Lovingshu's Forever
Date:2011-11-02 22:33
Remark:I've nothing to say~but there is someone leave my life and never back~
-->
Struts Chapter 9 Log4j(系統運行時的狀態記錄日誌)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.