1.通過Maven引入jar包,在pom.xml中配置
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2.在resource檔案夾中,建立一個屬性檔案,檔案名必須叫做:log4j.properties,把這個檔案的編碼格式改成UTF-8(該檔案右鍵-->Properties)
3.這邊除了路徑沒啥好改的:
### 設定###
log4j.rootLogger = debug,stdout,D,E
### 輸出資訊到控制擡 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 輸出DEBUG 級别以上的日志到=D://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 輸出ERROR 級别以上的日志到=D://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
注意:
日志級别有:
DEBUG:輸出調試資訊;指出細粒度資訊事件對調試應用程式是非常有幫助的。
INFO: 輸出提示資訊;消息在粗粒度級别上突出強調應用程式的運作過程。
WARN: 輸出警告資訊;表明會出現潛在錯誤的情形。
ERROR:輸出錯誤資訊;指出雖然發生錯誤事件,但仍然不影響系統的繼續運作。
FATAL: 輸出緻命錯誤;指出每個嚴重的錯誤事件将會導緻應用程式的退出。
這裡的級别從低到高:
debug是最低級别,當設定了debug級别之後,不論你調用的是哪一個方法都能夠被列印
如果你設定的是error級别,隻能夠列印error和fatal級别
依次推理...
4.測試:
private static Logger logger = Logger.getLogger(LoginServlet.class); // 設定成全局變量
// 需要列印日志的位置:
logger.debug("調用了LoginServlet的doPost方法...");
logger.error("這條資訊被儲存在err檔案中...");
logger.info("調用info");
logger.warn("調用了warm");
日志架構在我們項目中主要用來列印錯誤資訊:
我們一般來說隻有和資料庫打交道的時候才有可能出現錯誤,是以我們的錯誤資訊一般來說在service層去做日志,然後隻要出錯就列印錯誤資訊到檔案中。
5.調用,我這邊在servlet中調用,一般來說在service層去做日志
第一種做法:
我們在每一個service方法中都要對代碼進行try catch,然後将錯誤進行捕獲,記錄錯誤日志,但是如果真的這麼做了,就坑了,因為代碼備援(重複)很大,是以不推薦。
解決方案:我們能不能讓系統在調用servie方法的時候,類似于添加一個監聽,如果service方法出錯了,然後能夠幫助我們統一在一個地方寫輸出日志的代碼呢?
這種方案就是spring aop出現的理由
aop:面向切面程式設計思維:
隻要有service方法被調用,可以在service方法之前做一些操作,之後也可以做一些操作。
核心的部分:
切點, 通知,切面,目标,代理,織入。