參考博文:http://www.blogjava.net/zzzlyr/articles/353039.htmlhtml
這幾天一直在用logger記錄日誌,但一直不明白log4j.properties配置文件意思,下面看看其餘博主文章給本身充充電。java
本人認爲日誌記錄不只能夠幫記錄執行結果,看代碼執行是否正常,而且在排查問題時也能很快幫助你定位有問題代碼。web
1、介紹
Log4j是一個用Java編寫的可靠,快速和靈活的日誌框架(API),是Apache的一個開放源代碼項目,經過使用Log4j,咱們能夠控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務 器、NT的事件記錄器、UNIX Syslog守護進程等;咱們也能夠控制每一條日誌的輸出格式;經過定義每一條日誌信息的級別,咱們可以更加細緻地控制日誌的生成過程。
spring
Log4j由三個重要的組件構成:apache
loggers: 負責捕獲記錄信息,日誌信息的優先級。api
appenders : 負責發佈日誌信息,日誌信息的輸出目的地。session
layouts: 負責格式化不一樣風格的日誌信息,日誌信息的輸出格式。app
注意:框架
一、日記記錄的優先級(低到高):maven
# 控制檯顯示的內容是:優先級大於等於log4j.properties中配置的信息。
# ALL< DEBUG < INFO < WARN < ERROR < FATAL < OFF.
# Log4j建議只使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個級別。
# ERROR 爲嚴重錯誤 主要是程序的錯誤
# WARN 爲通常警告,好比session丟失
# INFO 爲通常要顯示的信息,好比登陸登出
# DEBUG 爲程序的調試信息
二、Log4j配置簡單示列:
第一步:maven 依賴slf4j包或手動引入以下jar包
一、slf4j-api-1.7.5.jar
二、slf4j-log4j12-1.7.5.jar
三、log4j-1.2.16.jar
第二步:在resource中配置log4j.properties(或者log4j.xml)配置文件。
#配置根Logger log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … #配置日誌信息輸出目的地Appender log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 log4j.appender.appenderName.optionN = valueN #配置日誌信息的格式(佈局) log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 log4j.appender.appenderName.layout.optionN = valueN
appenderName就是指定日誌信息輸出到哪一個地方。可同時指定多個輸出目的地:
log4j.rootLogger=DEBUG,console,D,E 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} [%c]-[%p] %m%n # 輸出DEBUG 級別以上的日誌到 log4j.appender.D = org.apache.log4j.RollingFileAppender log4j.appender.D.Threshold=DEBUG # DEBUG 級別以上的日誌輸出目錄 log4j.appender.D.File = C:/Users/admin/Desktop/debug.log log4j.appender.D.Append = true log4j.appender.D.MaxFileSize=5MB log4j.appender.D.layout= org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n # 輸出ERROR 級別以上的日誌到 log4j.appender.E = org.apache.log4j.RollingFileAppender log4j.appender.E.Threshold=ERROR log4j.appender.E.File = C:/Users/admin/Desktop/error.log log4j.appender.E.Append = true log4j.appender.E.MaxFileSize=5MB log4j.appender.E.layout= org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
注意:Log4j的配置
因爲WebApplicationContext須要使用日誌功能,用戶能夠將log4j.properties放置在類路徑下,這樣就會自動啓動。若是放在其餘地方,必須在web.xml中指定Log4j配置文件的位置。Spring爲啓動Log4j引擎提供了兩個類og4jConfigServlet和Log4jConfigListener,無論哪一種方式都必須保證可以在裝載Spring配置文件前先裝載Log4J配置信息。
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/log4j.properties</param-value> </context-param> <servlet> <servlet-name>log4jConfigServlet</servlet-name> <servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>
第三步:使用日誌,在controller層使用日誌
@Controller @RequestMapping(value = "/api/controller/brand") public class BrandController { private static Logger logger = LoggerFactory.getLogger(BrandController.class); @Autowired private BrandService brandService; @RequestMapping(value = "/update", method = RequestMethod.POST) public Brand update(Model model){ Brand brand = brandService.findByBrandCode("1a9e2fb7-d8d3-4dce-a50b-52c77efb2629"); brandService.update(brand); //SLF4J的日誌消息使用佔位符"{}"代替了經常使用的字符串拼接,據官方說這樣速度更快 logger.info("{}更新成功",brand.getId()); logger.error("更新失敗"); logger.debug("debug功能"); return brand; }
三、知識點:
log4j.rootLogger=info,stdout, R 定義 logger記錄大於等於info優先級日誌信息,stdout表示在控制檯顯示,R表示日誌記錄在文件中。
stdout:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 意思是把日誌輸出到控制檯
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 意思是日誌在控制檯顯示佈局模式
log4j.appender.stdout.layout.ConversionPattern=%d{HH\:mm\:ss} %c{1} - %m%n 表示日誌輸出的格式,%d{HH\:mm\:ss} %c{1} - %m%n表示時:分:秒 類名 日誌信息 換行
R:
log4j.appender.R=org.apache.log4j.RollingFileAppender :日誌文件大小到達指定尺寸的時候產生一個新的文件
log4j.appender.R.File=mat.log 表示是放日誌文件的路徑
log4j.appender.R.MaxFileSize=5MB 表示指定日誌文件大小
log4j.appender.R.layout=org.apache.log4j.PatternLayout 日誌記錄的佈局模式
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n 表示日誌輸出格式
年-月-日 時:分:秒 類名 優先級顯示日誌信息 換行
#appender名字定義
#appender名字定義
log4j.rootLogger=INFO,FILE,consoleAppender,RollingFile,MAIL,DailyRollingFile,DATABASE
log4j.addivity.org.apache=true
#配置日誌信息輸出目的地
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#(如:log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender)
# 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
#(如:log4j.appender.RollingFile.layout = org.apache.log4j.HTMLLayout)
# 1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
# 2.org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
# 3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
# 4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
#輸出格式:layout中的參數都以%開始,後面不一樣的參數表明不一樣的格式化信息(參數按字母表順序列出):
# %c 輸出所屬類的全名,可在修改成 %d{Num} ,Num類名輸出的維(如:"org.apache.elathen.ClassName",%C{2}將輸出elathen.ClassName)
# %d 輸出日誌時間其格式爲 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
# %l 輸出日誌事件發生位置,包括類目名、發生線程,在代碼中的行數
# %n 換行符
# %m 輸出代碼指定信息,如info(「message」),輸出message
# %p 輸出優先級,即 FATAL ,ERROR 等
# %r 輸出從啓動到顯示該log信息所耗費的毫秒數
# %t 輸出產生該日誌事件的線程名
#ConsoleAppender,控制檯輸出#FileAppender,文件日誌輸出#SMTPAppender,發郵件輸出日誌#SocketAppender,Socket日誌#NTEventLogAppender,Window NT日誌#SyslogAppender,#JMSAppender,#AsyncAppender,#NullAppender