<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Log4jTest { static public Logger logger = LoggerFactory.getLogger(Log4jTest.class); public static void main(String[] args) { // System.out.println("This is println message."); // 記錄debug級別的信息 logger.debug("This is debug message."); // 記錄info級別的信息 logger.info("This is info message."); // 記錄error級別的信息 logger.error("This is error message."); } }
問題:html
log4j:WARN No appenders could be found for logger (testSite.Log4jTest). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j.properties 配置文件缺失,即 src/main/resources 下無此文件java
#日誌 輸出級別 爲 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 或者自定義的級別,Log4j建議只使用中間四個級別。 #第一個參數爲 輸出 日誌級別 ,後面參數爲 Appender log4j.rootLogger=DEBUG,console,dailyFile.... # 表示Logger不會在父Logger的appender裏輸出,默認爲true log4j.additivity.org.apache=false
控制檯spring
# 控制檯(console)# log4j.appender.console=org.apache.log4j.ConsoleAppender # Threshold:指定日誌信息的最低輸出級別,默認爲DEBUG # log4j.appender.console.Threshold=DEBUG # ImmediateFlush:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true # log4j.appender.console.ImmediateFlush=true # Target:默認值是System.out # log4j.appender.console.Target=System.err #layout log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
文件sql
# 日誌文件(logFile)# log4j.appender.logFile=org.apache.log4j.FileAppender # Threshold:指定日誌信息的最低輸出級別,默認爲DEBUG。# log4j.appender.logFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true# log4j.appender.logFile.ImmediateFlush=true # Append:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true# log4j.appender.logFile.Append=true # File:指定消息輸出到logging.log4j文件中。# log4j.appender.logFile.File=D:/logs/log.log4j #layout log4j.appender.logFile.layout=org.apache.log4j.PatternLayout log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
天天產生一個日誌文件apache
# 按期回滾日誌文件(dailyFile)# log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender # Threshold:指定日誌信息的最低輸出級別,默認爲DEBUG。# log4j.appender.dailyFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true# log4j.appender.dailyFile.ImmediateFlush=true # Append:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true# log4j.appender.dailyFile.Append=true # File:指定消息輸出到logging.log4j文件中。# log4j.appender.dailyFile.File=D:/logs/log.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:每分鐘 # log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd #layout log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
文件大小到達指定尺寸的時候產生一個新的文件api
# 回滾文件(rollingFile)# log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender # Threshold:指定日誌信息的最低輸出級別,默認爲DEBUG log4j.appender.rollingFile.Threshold=DEBUG # ImmediateFlush:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。 log4j.appender.rollingFile.ImmediateFlush=true # Append:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true log4j.appender.rollingFile.Append=true # File:指定消息輸出到logging.log4j文件中 log4j.appender.rollingFile.File=D:/logs/log.log4j # MaxFileSize:後綴能夠是KB, MB 或者GB。 # 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1文件中 log4j.appender.rollingFile.MaxFileSize=200KB # 指定能夠產生的滾動文件的最大數,例如,設爲2則能夠產生 log4j.appender.rollingFile.MaxBackupIndex=50 #layout log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
將日誌信息以流格式發送到任意指定的地方bash
(1)org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式)選項:
ConversionPattern=%m%n:設定以怎樣的格式顯示消息多線程
格式化符號說明: %p:輸出日誌信息的優先級,即DEBUG,INFO,WARN,ERROR,FATAL。 %d:輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。 %r:輸出自應用程序啓動到輸出該log信息耗費的毫秒數。 %t:輸出產生該日誌事件的線程名。 %l:輸出日誌事件的發生位置,至關於%c.%M(%F:%L)的組合,包括類全名、方法、文件名以及在代碼中的行數。 例如:test.TestLog4j.main(TestLog4j.java:10)。 %c:輸出日誌信息所屬的類目,一般就是所在類的全名。 %M:輸出產生日誌信息的方法名。 %F:輸出日誌消息產生時所在的文件名稱。 %L::輸出代碼中的行號。 %m::輸出代碼中指定的具體日誌信息。 %n:輸出一個回車換行符,Windows平臺爲"rn",Unix平臺爲"n"。 %x:輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像java servlets這樣的多客戶多線程的應用中。 %%:輸出一個"%"字符。 另外,還能夠在%與格式字符之間加上修飾符來控制其最小長度、最大長度、和文本的對齊方式。如: 1) c:指定輸出category的名稱,最小的長度是20,若是category的名稱長度小於20的話,默認的狀況下右對齊。 2)%-20c:"-"號表示左對齊。 3)%.30c:指定輸出category的名稱,最大的長度是30,若是category的名稱長度大於30的話,就會將左邊多出的字符截掉, 但小於30的話也不會補空格。
(2)org.apache.log4j.HTMLLayout(以HTML表格形式佈局)選項:
LocationInfo=true:輸出java文件名稱和行號,默認值是false。
Title=My Logging: 默認值是Log4J Log Messages。app
(3)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
(4)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)佈局
# Output pattern : date [thread] priority category - message FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 log4j.rootLogger=INFO, Console, RollingFile #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] [%X{SEQ}] %l %m%n #RollingFile log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.RollingFile.File=logs/ams.balance.log log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [ %p ] [%X{SEQ}] %l %m%n # SQL \u6253\u5370 log4j.logger.com.jf.ams.bankpage.dao=DEBUG log4j.logger.com.springframework=DEBUG log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl=DEBUG
<!-- log4j 配置 開始 --> <context-param> <param-name> log4jConfigLocation </param-name > <param-value> /WEB-INF/classes/log4j.properties </param-value > </context-param> <context-param> <param-name> log4jRefreshInterval </param-name > <param-value> 600000 </param-value > </context-param>