PIXNET Logo登入

愛迪生的異想世界

跳到主文

雙腳走遍全世界 體會那人文風情 拍攝美好的時刻 成就不凡的人生

部落格全站分類:數位生活

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 11月 18 週二 201410:12
  • Log4j 詳細設定

一、Log4j簡介
Log4j有三個主要的元件:Loggers、Appenders、Layouts。

1、Loggers(寫Log )
被分為五個級別:DEBUG < INFO < WARN < ERROR < FATAL
只輸出級別不低於設定級別的訊息
ex:Loggers為INFO,則INFO、WARN、ERROR和FATAL都會輸出 DEBUG則不會

logger名稱階層關係
ex:名稱為"com.foo"的 logger 是名稱為"com.foo.Bar"的 logger的parent
程式中具名取得logger的方法是
Logger.getLogger(String name)  //名稱相同取得的logger一定一樣,不同則產生新的
通常我們用  Logger.getLogger(myApp.class) 取得loggger,名稱為程式的class  name,因此層級關係跟package層級關係吻合...

有一個最上層的root logger,root logger 一定存在的,且只能以 Logger.getRootLogger()方式取得它的參考.不能以具名方式取得.

2、Appenders(log訊息的終點(目的地))

常使用的類如下:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件大小到達指定size的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌訊息以輸出流格式發送到任意指定的地方)

如 System.out.println("Some message..."), 對Log4j 而言appenders 就是 console


配置模式:
log4j.appender.appenderName = className
log4j.appender.appenderName.Option1 = value1
…
log4j.appender.appenderName.OptionN = valueN

3、Layouts( Log訊息的格式 )

常使用的類如下:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
org.apache.log4j.SimpleLayout(包含日誌訊息的級別和訊息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等訊息)

配置模式:

log4j.appender.appenderName.layout =className
log4j.appender.appenderName.layout.Option1 = value1
…
log4j.appender.appenderName.layout.OptionN = valueN


二、簡單範例

log4j.rootLogger=Info, A1, A2
# A1 is set to be a ConsoleAppender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
# A2 is set to be a file
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n
log4j.appender.A2.File=./log/gpserver-${log4j.date}.log




三、配置詳解

配置文件事實上也就是對Logger、Appender及Layout進行相應設定。
Log4j支援兩種配置文件格式,一種是XML格式的文件,一種是properties屬性文件。

下面以properties屬性文件為例介紹log4j.properties的配置。

1、配置根Logger:
log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
log4j.additivity.org.apache=false:表示Logger不會在父Logger的appender裡輸出,默認為true。

level :設定日誌記錄的最低級別,可設的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別,
ex:Loggers為INFO,則INFO、WARN、ERROR和FATAL都會輸出 DEBUG則不會

appenderName:指定log訊息要輸出到哪裡。可以同時指定多個輸出目的地,用逗號隔開。
例如:log4j.rootLogger=INFO,A1,B2,C3

2、配置appender:
log4j.appender.appenderName = className
appenderName:自定義appderName,在log4j.rootLogger設置中使用;
className:可設值如下:
   (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(將日誌訊息以輸出流格式發送到任意指定的地方)


Appender 的設定亦會反映在 Logger 的階層中。
當 Logger 輸出一筆 log message 時,父階層的 Appender 和自己的 Appender(如果有的話)都會記錄到這筆 log message;

例如"com.foo" Logger 有一個 Appender 將 log message 輸出到 console,
而 "com.foo.bar" 有一個 Appender 將 log message 輸出到檔案;
當 "com.foo.bar" Logger 輸出一筆 log message 時, console 和檔案都會出現這筆 log message。

而最簡單的例子,就是當 root logger 擁有一個輸出到 console 的 Appender 時,
則程式中所有的 logger 所產生的 log message 都會輸出到 console。
唯一個例外的情況,是當某個 logger 將自己的 additivity 屬性設為 false(Logger.setAdditivity(false)),
則此 logger 與隸屬於它的子 logger 都不會將 log message 寫到 console。


(1)ConsoleAppender選項:
Threshold=WARN:指定日誌訊息的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Target=System.err:預設值是System.out。

(2)FileAppender選項:
Threshold=WARN:指定日誌訊息的最低輸出級別,默認為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定文件中,false則將消息覆蓋指定的文件內容,預設值是true。
File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j文件中。

(3)DailyRollingFileAppender選項:
Threshold=WARN:指定日誌訊息的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定文件中,false則將消息覆蓋指定的文件內容,預設值是true。
File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j文件中。
DatePattern='.'yyyy-MM:即每月產生一個新的日誌文件。
若目前月的日誌文件名為logging.log4j,前一個月的日誌文件名會為為logging.log4j.yyyy-MM
另外,也可以指定按周、天、時、分等來滾動日誌文件,對應的格式如下:
1)'.'yyyy-MM:每月
2)'.'yyyy-ww:每週
3)'.'yyyy-MM-dd:每天
4)'.'yyyy-MM-dd-a:每天兩次
5)'.'yyyy-MM-dd-HH:每小時
6)'.'yyyy-MM-dd-HH-mm:每分鐘

若要有副檔名:
'_'yyyy-MM-dd'.log'


(4)RollingFileAppender選項:
Threshold=WARN:指定日誌訊息的最低輸出級別,預設為DEBUG。
ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。
Append=false:true表示訊息增加到指定文件中,false則將消息覆蓋指定的文件內容,預設值是true。
File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j文件中。
MaxFileSize=100KB:單位可以是KB, MB 或者GB。在日誌文件到達該大小時,將會自動變更,即將原來的內容移到logging.log4j.1文件中。
MaxBackupIndex=2:指定可以產生的變動文件的最大數,例如,設為2則可以產生logging.log4j.1,logging.log4j.2兩個變動文件和一個logging.log4j文件。

3、配置日誌訊息的輸出格式(Layout):
log4j.appender.appenderName.layout=className
className:可設值如下:
(1)org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
(2)org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
(3)org.apache.log4j.SimpleLayout(包含日誌訊息的級別和訊息字符串)
(4)org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等訊息)

Layout 亦會反映在 Logger 的階層上。

(1)HTMLLayout選項:
LocationInfo=true:輸出java文件名稱和行號,預設值是false。
Title=My Logging: 預設值是Log4J Log Messages。

(2)PatternLayout選項:
ConversionPattern=%m%n:設定以怎樣的格式顯示訊息。

例如,為 Logger 加入一個 conversion pattern 為 "%r [%t] %-5p %c - %m%n" 的 PatternLayout,則輸出的 log message 就可能會像下列這樣:

176 [main] INFO org.foo.Bar - Located nearest gas station.


格式字元說明:
# %c 輸出日誌訊息所屬的類別的全名
# %d 輸出日誌時間點的日期或時間,指定格式的方式:%d{yyy-MM-dd HH:mm:ss }。
# %l 輸出日誌事件的發生位置,即輸出日誌訊息的語句處於它所在的類別的第幾行。相當於%c.%M(%F:%L)的組合包括類別全名、method、檔案名以及行數例如:test.TestLog4j.main(TestLog4j.java:10)
# %m 輸出的訊息,如log(message)中的message。
# %n 輸出一個換行符號。
# %p 輸出優先階層,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推。
# %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
# %t 輸出產生該日誌事件的執行緒名。
# %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
# %f 輸出日誌訊息所屬的類別的類別名。
# %M 輸出產生日誌的方法名。
# %F 輸出日誌時所在的檔案名稱。
# %L 輸出行號。
# %x 輸出和當前執行緒相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多執行緒的應用中。
# %% 輸出一個"%"字符。

另外,也可以在%與格式字符之間加上修飾符來控制其最小長度、最大長度、對齊方式。如:
1) c:指定輸出category的名稱,最小的長度是20,如果category的名稱長度小於20的話,預設的情況下右對齊。
2)%-20c:"-"號表示左對齊。
3)%.30c:指定輸出category的名稱,最大的長度是30,如果category的名稱長度大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會補空格。



範例

Log4j配置文件實現了輸出到控制台(console)、logFile、rollingFile、發送日誌郵件、輸出到資料庫日誌表、自定義標籤等

log4j.rootLogger=DEBUG,console,dailyFile,im
log4j.additivity.org.apache=true

# 控制台(console)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.ImmediateFlush=true
log4j.appender.console.Target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 日誌文件(logFile)
log4j.appender.logFile=org.apache.log4j.FileAppender
log4j.appender.logFile.Threshold=DEBUG
log4j.appender.logFile.ImmediateFlush=true
log4j.appender.logFile.Append=true
log4j.appender.logFile.File=D:/logs/log.log4j
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# rollingFile
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=D:/logs/log.log4j
log4j.appender.rollingFile.MaxFileSize=200KB
log4j.appender.rollingFile.MaxBackupIndex=50
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 定期變更檔案(dailyFile)
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyFile.Threshold=DEBUG
log4j.appender.dailyFile.ImmediateFlush=true
log4j.appender.dailyFile.Append=true
log4j.appender.dailyFile.File=D:/logs/log.log4j
log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 應用於socket
log4j.appender.socket=org.apache.log4j.RollingFileAppender
log4j.appender.socket.RemoteHost=localhost
log4j.appender.socket.Port=5001
log4j.appender.socket.LocationInfo=true
# Set up for Log Factor 5
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

# 發送日誌到指定郵件
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
log4j.appender.mail.Threshold=FATAL
log4j.appender.mail.BufferSize=10
log4j.appender.mail.From = xxx@mail.com
log4j.appender.mail.SMTPHost=mail.com
log4j.appender.mail.Subject=Log4J Message
log4j.appender.mail.To= xxx@mail.com
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 應用於資料庫
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=
log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 自定義Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
(繼續閱讀...)
文章標籤

EdisonDai 發表在 痞客邦 留言(0) 人氣(14,504)

  • 個人分類:Java知識
▲top
  • 7月 11 週五 201417:41
  • Checked Exception and UncheckException(Runtime Exception)

「受檢例外」(Checked Exception): 就是應被檢查的例外不論是編譯器或設計者,並且做好異常例外處理
在某些情況下例外的發生是可預期的,例如使用輸入輸出功能時,可能會由於硬體環境問題,而使得程式無法正常從硬體取得輸入或進行輸出,這種錯誤是可預期發生的。
當拋出CheckedException此類例外時應處理(try-catch)或作出轉拋(throws)。
 
(繼續閱讀...)
文章標籤

EdisonDai 發表在 痞客邦 留言(0) 人氣(26)

  • 個人分類:Java知識
▲top
  • 5月 02 週五 201422:41
  • abstract Class 和 interface的差異

1.
interface的方法全都是抽象方法
abstract則有一般方法和抽象方法
抽象方法指的是沒有「實作」出來的方法

2.
interface與abstract類別都不能直接用來建立物件實體,
必須由一個標準類別來繼承它,實作其抽象方法,
然後再以此建立物件實體。
(繼續閱讀...)
文章標籤

EdisonDai 發表在 痞客邦 留言(0) 人氣(4,580)

  • 個人分類:Java知識
▲top
  • 3月 29 週六 201401:31
  • Hibernate映射文件對應Java和SQL型態




Java 資料型態
Hibernate 資料型態
標準SQL資料型態


byte、java.lang.Byte
byte
TINYINT


short、java.lang.Short
short
SMALLINT


int、java.lang.Integer
integer
INGEGER


long、java.lang.Long
long
BIGINT


float、java.lang.Float
float
FLOAT


double、java.lang.Double
double
DOUBLE


java.math.BigDecimal
big_decimal
NUMERIC


char、java.lang.Character
character
CHAR(1)


boolean、java.lang.Boolean
boolean
BIT


java.lang.String
string
VARCHAR


boolean、java.lang.Boolean
yes_no
CHAR(1)('Y'或'N')


boolean、java.lang.Boolean
true_false
CHAR(1)('Y'或'N')


java.util.Date、java.sql.Date
date
DATE


java.util.Date、java.sql.Time
time
TIME


java.util.Date、java.sql.Timestamp
timestamp
TIMESTAMP


java.util.Calendar
calendar
TIMESTAMP


java.util.Calendar
calendar_date
DATE


byte[]
binary
VARBINARY、BLOB


java.lang.String
text
CLOB


java.io.Serializable
serializable
VARBINARY、BLOB


java.sql.Clob
clob
CLOB


java.sql.Blob
blob
BLOB


java.lang.Class
class
VARCHAR


java.util.Locale
locale
VARCHAR


java.util.TimeZone
timezone
VARCHAR


java.util.Currency
currency
VARCHAR


(繼續閱讀...)
文章標籤

EdisonDai 發表在 痞客邦 留言(0) 人氣(820)

  • 個人分類:Java知識
▲top
  • 3月 16 週日 201401:02
  • Java String to int(字串轉整數)

Method 1. int intValue = Integer.valueOf("文字");

Method 2. int intValue = Integer.parseInt("文字");
(繼續閱讀...)
文章標籤

EdisonDai 發表在 痞客邦 留言(0) 人氣(402)

  • 個人分類:Java知識
▲top
1

個人頭像

EdisonDai
暱稱:
EdisonDai
分類:
數位生活
好友:
累積中
地區:

熱門文章

  • (13,042)Windows如何查詢被佔用的80 PORT和解決方法
  • (10,184)jQuery型態轉換(字串轉數字)
  • (4,580)abstract Class 和 interface的差異
  • (14,504)Log4j 詳細設定
  • (4,916)【原來這麼拜 - 開工/開市】

近期文章

  • 【原來這麼拜 - 鬧元宵】
  • 【原來這麼拜 - 開工/開市】
  • 【原來這麼拜 - 送神清屯】
  • 【原來這麼拜 - 尾牙】
  • 【原來這麼拜 - 除夕】
  • 【原來這麼拜 - 冬至】
  • 【原來這麼拜 - 慶讚中元怎麼拜?】
  • Log4j 詳細設定
  • Checked Exception and UncheckException(Runtime Exception)
  • Collection 和 Map

文章分類

toggle 喝杯爪哇咖啡吧 (4)
  • Java知識 (5)
  • 基礎Java (9)
  • Windows (1)
  • jQuery (2)
toggle 原來這麼拜 (7)
  • 送神清屯 (1)
  • 尾牙 (1)
  • 除夕 (1)
  • 冬至 (1)
  • 中元普渡 (1)
  • 開工/開市 (1)
  • 鬧元宵 (1)
  • 未分類文章 (1)