log4j
日志:系統的運行信息,功能主要用於系統調試和后期維護
運行的日志記錄占代碼總量的4%
Apache開源項目Log4j
可以控制日志的輸出設置(控制台、文件等)
可以控制日志的輸出格式
通過日志級別、控制日志的生成過程
特點:通過配置文件靈活配置
對比System.out不利於維護
開發步驟
導入jar包
1.創建記錄器Logger
private static Logger LOG = Logger.getLogger(TestLog4j.class.getName())
2.設置默認配置(輸出到控制台)
BasicConfigurator.configure();
3.設置輸出級別(可選)
LOG.setLevel(Level.ERROR)
4.輸入內容
LOG.trace("這個trace輸出"); //堆棧
LOG.debug("這個debug輸出"); //調試
LOG.info("這個info輸出"); //信息
LOG.warn("這個warn輸出"); //警告
LOG.error("這個error輸出"); //嚴重
LOG.fatal("這個fatal輸出"); //致命
日記級別:由高到低,六個級別
fatal(致命)、error(錯誤)、warn(警告)、info(信息)、debug(調試)、trace(棧)
設置級別:fatal、error、warn、info、debug、trace、off關閉、all所有
Logger對象,提供方法確定使用哪個級別提示。
public void debug(Object message)
public void info(Object message)
public void warn(Object message)
public void error(Object message)

方法的執行順序 : 當前級別,以及更高級別都將執行
trace級別:所有的方法都執行
info級別:info/warn/error/fatal
配置文件
文件名稱:log4j.properties
文件位置:src
文件內容:
記錄器(Loggers),設置級別與輸出源
log4j.rootLogger=輸出級別,輸出源1,輸出源2...
例如:log4j.rootLogger=info.stdout
輸出源(Appenders),確定輸出位置
語法 log4j.appender.名稱 = 實現類
屬性語法 log4j.appender.名稱.屬性 = 值 --執行實現類的setter方法,將值進行賦值。

實現類:log4j 已經提供好的
org.apache.log4j.ConsoleAppender 輸出到控制台
target 確定使用什么語句進行輸出 取值:System.out、System.err
org.apache.log4j.FileAppender 輸出到文本
布局(Layouts),確定輸出格式
語法:log4j.appender.名稱.layout = 實現類

布局參數語法:lo4j.appender.名稱.ConversionPattern = 參數
Lo4j匯總
1.配置根Logger:
| 1 | |
| 2 | log4j.rootLogger = [ level ] , appenderName1, appenderName2, … |
| 3 | log4j.additivity.org.apache=false:表示Logger不會在父Logger的appender里輸出,默認為true。 |
| 4 | level :設定日志記錄的最低級別,可設的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定義的級別,Log4j建議只使用中間四個級別。通過在這里設定級別,您可以控制應用程序中相應級別的日志信息的開關,比如在這里設定了INFO級別,則應用程序中所有DEBUG級別的日志信息將不會被打印出來。 |
| 5 | appenderName:就是指定日志信息要輸出到哪里。可以同時指定多個輸出目的地,用逗號隔開。 |
| 6 | 例如:log4j.rootLogger=INFO,A1,B2,C3 |
| 7 |
2.配置日志信息輸出目的地(appender)
| 01 | |
| 02 | log4j.appender.appenderName = className |
| 03 | appenderName:自定義appderName,在log4j.rootLogger設置中使用; |
| 04 | className:可設值如下: |
| 05 | (1)org.apache.log4j.ConsoleAppender(控制台) |
| 06 | (2)org.apache.log4j.FileAppender(文件) |
| 07 | (3)org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件) |
| 08 | (4)org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件) |
| 09 | (5)org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方) |
| 10 | (1)ConsoleAppender選項: |
| 11 | Threshold=WARN:指定日志信息的最低輸出級別,默認為DEBUG。 |
| 12 | ImmediateFlush=true:表示所有消息都會被立即輸出,設為false則不輸出,默認值是true。 |
| 13 | Target=System.err:默認值是System.out。 |
| 14 | (2)FileAppender選項: |
| 15 | Threshold=WARN:指定日志信息的最低輸出級別,默認為DEBUG。 |
| 16 | ImmediateFlush=true:表示所有消息都會被立即輸出,設為false則不輸出,默認值是true。 |
| 17 | Append=false:true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。 |
| 18 | File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。 |
| 19 | (3)DailyRollingFileAppender選項: |
| 20 | Threshold=WARN:指定日志信息的最低輸出級別,默認為DEBUG。 |
| 21 | ImmediateFlush=true:表示所有消息都會被立即輸出,設為false則不輸出,默認值是true。 |
| 22 | Append=false:true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。 |
| 23 | File=D:/logs/logging.log4j:指定當前消息輸出到logging.log4j文件中。 |
| 24 | DatePattern='.'yyyy-MM:每月滾動一次日志文件,即每月產生一個新的日志文件。當前月的日志文件名為logging.log4j,前一個月的日志文件名為logging.log4j.yyyy-MM。 |
| 25 | 另外,也可以指定按周、天、時、分等來滾動日志文件,對應的格式如下: |
| 26 | 1)'.'yyyy-MM:每月 |
| 27 | 2)'.'yyyy-ww:每周 |
| 28 | 3)'.'yyyy-MM-dd:每天 |
| 29 | 4)'.'yyyy-MM-dd-a:每天兩次 |
| 30 | 5)'.'yyyy-MM-dd-HH:每小時 |
| 31 | 6)'.'yyyy-MM-dd-HH-mm:每分鍾 |
| 32 | (4)RollingFileAppender選項: |
| 33 | Threshold=WARN:指定日志信息的最低輸出級別,默認為DEBUG。 |
| 34 | ImmediateFlush=true:表示所有消息都會被立即輸出,設為false則不輸出,默認值是true。 |
| 35 | Append=false:true表示消息增加到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。 |
| 36 | File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。 |
| 37 | MaxFileSize=100KB:后綴可以是KB, MB 或者GB。在日志文件到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1文件中。 |
| 38 | MaxBackupIndex=2:指定可以產生的滾動文件的最大數,例如,設為2則可以產生logging.log4j.1,logging.log4j.2兩個滾動文件和一個logging.log4j文件。 |
| 39 |
3.配置日志信息的輸出格式(Layout)
| 01 | |
| 02 | log4j.appender.appenderName.layout=className |
| 03 | className:可設值如下: |
| 04 | (1)org.apache.log4j.HTMLLayout(以HTML表格形式布局) |
| 05 | (2)org.apache.log4j.PatternLayout(可以靈活地指定布局模式) |
| 06 | (3)org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串) |
| 07 | (4)org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息) |
| 08 | (1)HTMLLayout選項: |
| 09 | LocationInfo=true:輸出java文件名稱和行號,默認值是false。 |
| 10 | Title=My Logging: 默認值是Log4J Log Messages。 |
| 11 | (2)PatternLayout選項: |
| 12 | ConversionPattern=%m%n:設定以怎樣的格式顯示消息。 |
| 13 | 格式化符號說明: |
| 14 | %p:輸出日志信息的優先級,即DEBUG,INFO,WARN,ERROR,FATAL。 |
| 15 | %d:輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。 |
| 16 | %r:輸出自應用程序啟動到輸出該log信息耗費的毫秒數。 |
| 17 | %t:輸出產生該日志事件的線程名。 |
| 18 | %l:輸出日志事件的發生位置,相當於%c.%M(%F:%L)的組合,包括類全名、方法、文件名以及在代碼中的行數。例如:test.TestLog4j.main(TestLog4j.java:10)。 |
| 19 | %c:輸出日志信息所屬的類目,通常就是所在類的全名。 |
| 20 | %M:輸出產生日志信息的方法名。 |
| 21 | %F:輸出日志消息產生時所在的文件名稱。 |
| 22 | %L::輸出代碼中的行號。 |
| 23 | %m::輸出代碼中指定的具體日志信息。 |
| 24 | %n:輸出一個回車換行符,Windows平台為"rn",Unix平台為"n"。 |
| 25 | %x:輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。 |
| 26 | %%:輸出一個"%"字符。 |
| 27 | 另外,還可以在%與格式字符之間加上修飾符來控制其最小長度、最大長度、和文本的對齊方式。如: |
| 28 | 1) c:指定輸出category的名稱,最小的長度是20,如果category的名稱長度小於20的話,默認的情況下右對齊。 |
| 29 | 2)%-20c:"-"號表示左對齊。 |
| 30 | 3)%.30c:指定輸出category的名稱,最大的長度是30,如果category的名稱長度大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會補空格。 |
| 31 |
附:Log4j比較全面的配置
| 01 | |
| 02 | Log4j配置文件實現了輸出到控制台、文件、回滾文件、發送日志郵件、輸出到數據庫日志表、自定義標簽等全套功能。 |
| 03 | log4j.rootLogger=DEBUG,console,dailyFile,im |
| 04 | log4j.additivity.org.apache=true |
| 05 | # 控制台(console) |
| 06 | log4j.appender.console=org.apache.log4j.ConsoleAppender |
| 07 | log4j.appender.console.Threshold=DEBUG |
| 08 | log4j.appender.console.ImmediateFlush=true |
| 09 | log4j.appender.console.Target=System.err |
| 10 | log4j.appender.console.layout=org.apache.log4j.PatternLayout |
| 11 | log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 12 | |
| 13 | # 日志文件(logFile) |
| 14 | log4j.appender.logFile=org.apache.log4j.FileAppender |
| 15 | log4j.appender.logFile.Threshold=DEBUG |
| 16 | log4j.appender.logFile.ImmediateFlush=true |
| 17 | log4j.appender.logFile.Append=true |
| 18 | log4j.appender.logFile.File=D:/logs/log.log4j |
| 19 | log4j.appender.logFile.layout=org.apache.log4j.PatternLayout |
| 20 | log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 21 | # 回滾文件(rollingFile) |
| 22 | log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender |
| 23 | log4j.appender.rollingFile.Threshold=DEBUG |
| 24 | log4j.appender.rollingFile.ImmediateFlush=true |
| 25 | log4j.appender.rollingFile.Append=true |
| 26 | log4j.appender.rollingFile.File=D:/logs/log.log4j |
| 27 | log4j.appender.rollingFile.MaxFileSize=200KB |
| 28 | log4j.appender.rollingFile.MaxBackupIndex=50 |
| 29 | log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout |
| 30 | log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 31 | # 定期回滾日志文件(dailyFile) |
| 32 | log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender |
| 33 | log4j.appender.dailyFile.Threshold=DEBUG |
| 34 | log4j.appender.dailyFile.ImmediateFlush=true |
| 35 | log4j.appender.dailyFile.Append=true |
| 36 | log4j.appender.dailyFile.File=D:/logs/log.log4j |
| 37 | log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd |
| 38 | log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout |
| 39 | log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 40 | # 應用於socket |
| 41 | log4j.appender.socket=org.apache.log4j.RollingFileAppender |
| 42 | log4j.appender.socket.RemoteHost=localhost |
| 43 | log4j.appender.socket.Port=5001 |
| 44 | log4j.appender.socket.LocationInfo=true |
| 45 | # Set up for Log Factor 5 |
| 46 | log4j.appender.socket.layout=org.apache.log4j.PatternLayout |
| 47 | log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 48 | # Log Factor 5 Appender |
| 49 | log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender |
| 50 | log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000 |
| 51 | # 發送日志到指定郵件 |
| 52 | log4j.appender.mail=org.apache.log4j.net.SMTPAppender |
| 53 | log4j.appender.mail.Threshold=FATAL |
| 54 | log4j.appender.mail.BufferSize=10 |
| 55 | log4j.appender.mail.From = xxx@mail.com |
| 56 | log4j.appender.mail.SMTPHost=mail.com |
| 57 | log4j.appender.mail.Subject=Log4J Message |
| 58 | log4j.appender.mail.To= xxx@mail.com |
| 59 | log4j.appender.mail.layout=org.apache.log4j.PatternLayout |
| 60 | log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 61 | # 應用於數據庫 |
| 62 | log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender |
| 63 | log4j.appender.database.URL=jdbc:mysql://localhost:3306/test |
| 64 | log4j.appender.database.driver=com.mysql.jdbc.Driver |
| 65 | log4j.appender.database.user=root |
| 66 | log4j.appender.database.password= |
| 67 | log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n') |
| 68 | log4j.appender.database.layout=org.apache.log4j.PatternLayout |
| 69 | log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
| 70 | |
| 71 | # 自定義Appender |
| 72 | log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender |
| 73 | log4j.appender.im.host = mail.cybercorlin.net |
| 74 | log4j.appender.im.username = username |
| 75 | log4j.appender.im.password = password |
| 76 | log4j.appender.im.recipient = corlin@cybercorlin.net |
| 77 | log4j.appender.im.layout=org.apache.log4j.PatternLayout |
| 78 | log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n |
