Maven項目中添加log4j.properties實現日誌功能工具

搭建完maven+SpringMVC以後,我們還需要添加日誌功能,方便記錄應用在應用中產生的日誌信息。

1、添加依賴包:依賴中除了對slf4j依賴外還有對郵件插件的依賴。當遇到報錯的時候可以發送郵件到我們指定的郵箱

<!-- ============== log begin ============== -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.25</version>
		</dependency>
		<!-- ============== log end ============== -->
		<!-- 發送日誌到郵箱依賴 -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>activation</artifactId>
			<version>1.1</version>
		</dependency>
		<!-- 發送日誌到郵箱依賴 -->

2、新建log4j.properties文件,必須在resources目錄下


3、log4j.properties內容

    ### set log levels ###    
    log4j.rootLogger = INFO,DEBUG, console, infoFile, errorFile ,debugfile,mail 
    LocationInfo=true    
     
    log4j.appender.console = org.apache.log4j.ConsoleAppender  
    log4j.appender.console.Target = System.out  
    log4j.appender.console.layout = org.apache.log4j.PatternLayout 
    ## 
    log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m   %x %n 
      
    log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.infoFile.Threshold = INFO  
    log4j.appender.infoFile.File = D:/logs/log 
    log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'  
    log4j.appender.infoFile.Append=true
    log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout  
    log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n 
      
    log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender  
    log4j.appender.errorFile.Threshold = ERROR  
    log4j.appender.errorFile.File = D:/logs/error  
    log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'  
    log4j.appender.errorFile.Append=true  
    log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout  
    log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n
    
    #log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender  
    #log4j.appender.debugfile.Threshold = DEBUG  
    #log4j.appender.debugfile.File = D:/logs/debug  
    #log4j.appender.debugfile.DatePattern = '.'yyyy-MM-dd'.log'  
    #log4j.appender.debugfile.Append=true  
    #log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout  
    #log4j.appender.debugfile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m  %x %n
    
    
    ##mail 
    log4j.appender.mail=org.apache.log4j.net.SMTPAppender  
	log4j.appender.mail.Threshold=ERROR  
	log4j.appender.mail.BufferSize=1  
	log4j.appender.mail.From [email protected]
	log4j.appender.mail.SMTPHost=mail.qq.com
	log4j.appender.mail.Subject=Log4J Message  
	[email protected]
	log4j.appender.mail.SMTPUsername=123
	log4j.appender.mail.SMTPPassword=123456
	log4j.appender.mail.layout=org.apache.log4j.PatternLayout
	#log4j.appender.mail.layout=org.apache.log4j.PatternLayout  
	log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n 

4、上面內容的解釋:

配置詳情解釋:
------------------------------------------------------------------------------------------------------
Appender 爲日誌輸出目的地,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯),  
org.apache.log4j.FileAppender(文件),  
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件),  
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),  
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

Layout:日誌輸出格式,Log4j提供的layout有以下幾種
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),  
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),  
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),  
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息:
-X號: X信息輸出時左對齊;
%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c: 輸出日誌信息所屬的類目,通常就是所在類的全名
%t: 輸出產生該日誌事件的線程名
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
%%: 輸出一個"%"字符
%F: 輸出日誌消息產生時所在的文件名稱
%L: 輸出代碼中的行號
%m: 輸出代碼中指定的消息,產生的日誌具體信息
%n: 輸出一個回車換行符,Windows平臺爲"\r\n",Unix平臺爲"\n"輸出日誌信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,"-"號指定左對齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
4)%20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊較遠輸出的字符截掉。

---------------------------------------------------------------------------------------------------------
http://blog.csdn.net/qq_30175203/article/details/52084127
---------------------------------------------------------------------------------------------------------
################################################################################ 
#①配置根Logger,其語法爲: 
# 
#log4j.rootLogger =[level],appenderName,appenderName2,... 
#level是日誌記錄的優先級,分爲OFF,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,ALL 
##Log4j建議只使用四個級別,優先級從低到高分別是DEBUG,INFO,WARN,ERROR 
#通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關 
#比如在這裏定義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來 
#appenderName就是指定日誌信息輸出到哪個地方。可同時指定多個輸出目的 
################################################################################ 
################################################################################ 
#②配置日誌信息輸出目的地Appender,其語法爲: 
# 
#log4j.appender.appenderName =fully.qualified.name.of.appender.class 
#log4j.appender.appenderName.optionN =valueN 
# 
#Log4j提供的appender有以下幾種: 
#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(將日誌信息以流格式發送到任意指定的地方) 
# 
#1)ConsoleAppender選項屬性 
# -Threshold = DEBUG:指定日誌消息的輸出最低層次 
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
# -Target = System.err:默認值System.out,輸出到控制檯(err爲紅色,out爲黑色) 
# 
#2)FileAppender選項屬性 
# -Threshold = INFO:指定日誌消息的輸出最低層次 
# -ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
# -File = C:\log4j.log:指定消息輸出到C:\log4j.log文件 
# -Append = FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
# -Encoding = UTF-8:可以指定文件編碼格式 
# 
#3)DailyRollingFileAppender選項屬性 
#-Threshold = WARN:指定日誌消息的輸出最低層次 
#-ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
# -File =C:\log4j.log:指定消息輸出到C:\log4j.log文件 
# -Append= FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
#-DatePattern='.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。還可以按用以下參數: 
#              '.'yyyy-MM:每月 
#              '.'yyyy-ww:每週 
#              '.'yyyy-MM-dd:每天 
#              '.'yyyy-MM-dd-a:每天兩次 
#              '.'yyyy-MM-dd-HH:每小時 
#              '.'yyyy-MM-dd-HH-mm:每分鐘 
#-Encoding = UTF-8:可以指定文件編碼格式 
# 
#4)RollingFileAppender選項屬性 
#-Threshold = ERROR:指定日誌消息的輸出最低層次 
#-ImmediateFlush = TRUE:默認值是true,所有的消息都會被立即輸出 
# -File =C:/log4j.log:指定消息輸出到C:/log4j.log文件 
# -Append= FALSE:默認值true,將消息追加到指定文件中,false指將消息覆蓋指定的文件內容 
#-MaxFileSize = 100KB:後綴可以是KB,MB,GB.在日誌文件到達該大小時,將會自動滾動.如:log4j.log.1 
#-MaxBackupIndex = 2:指定可以產生的滾動文件的最大數 
#-Encoding = UTF-8:可以指定文件編碼格式 、、//好像不支持這個功能
################################################################################ 
################################################################################ 
#③配置日誌信息的格式(佈局),其語法爲: 
# 
#log4j.appender.appenderName.layout=fully.qualified.name.of.layout.class 
#log4j.appender.appenderName.layout.optionN= valueN 
# 
#Log4j提供的layout有以下幾種: 
#5)org.apache.log4j.HTMLLayout(以HTML表格形式佈局) 
#6)org.apache.log4j.PatternLayout(可以靈活地指定佈局模式) 
#7)org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串) 
#8)org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息) 
#9)org.apache.log4j.xml.XMLLayout(以XML形式佈局) 
# 
#5)HTMLLayout選項屬性 
#-LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 
#-Title=Struts Log Message:默認值 Log4JLog Messages 
# 
#6)PatternLayout選項屬性 
#-ConversionPattern = %m%n:格式化指定的消息(參數意思下面有) 
# 
#9)XMLLayout選項屬性 
#-LocationInfo = TRUE:默認值false,輸出java文件名稱和行號 
# 
#Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下: 
#%m 輸出代碼中指定的消息 
#%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL 
#%r 輸出自應用啓動到輸出該log信息耗費的毫秒數 
#%c 輸出所屬的類目,通常就是所在類的全名 
#%t 輸出產生該日誌事件的線程名 
#%n 輸出一個回車換行符,Windows平臺爲“\r\n”,Unix平臺爲“\n” 
#%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式 
#    如:%d{yyyy年MM月dd日HH:mm:ss,SSS},輸出類似:2012年01月05日 22:10:28,921 
#%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數 
#    如:Testlog.main(TestLog.java:10) 
#%F 輸出日誌消息產生時所在的文件名稱 
#%L 輸出代碼中的行號 
#%x 輸出和當前線程相關聯的NDC(嵌套診斷環境),像javaservlets多客戶多線程的應用中 
#%% 輸出一個"%"字符 
# 
# 可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: 
#  %5c: 輸出category名稱,最小寬度是5,category<5,默認的情況下右對齊 
#  %-5c:輸出category名稱,最小寬度是5,category<5,"-"號指定左對齊,會有空格 
#  %.5c:輸出category名稱,最大寬度是5,category>5,就會將左邊多出的字符截掉,<5不會有空格 
#  %20.30c:category名稱<20補空格,並且右對齊,>30字符,就從左邊交遠銷出的字符截掉 


輸出結果爲:[2017-12-07 14:18:33,149]-[INFO]:你好! [ Test.java:15 ]


目前發送到郵箱這個有的還不能用,我自己本地測試公司郵箱是可以發送到自己公司郵箱,但是使用qq有限卻無法發送過去報鏈接失敗:查過原因:

一下是網上找的:但是我也不知道怎麼去放開,試了好多遍都不行。

這個是網上查找的解決辦法,但是不知道咋搞,有明白的同學,請教各位了。。。

JavaMail無法連接SMTP25端口問題

測試JavaMail發郵件功能,始終發生錯誤:
javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25
使用outlook收發郵件正常,使用telnet smtp.163.com 25不能連接
什麼錯誤?很是莫名其妙!
從網上查資料,只有提問的沒有回答的,有些都問了若干年了沒有答案,真年頭技術都在幹嘛啊?
廢話少說,問題查到了,是安裝的殺毒軟件進行了端口攔截,“禁止大量發送郵件的蠕蟲病毒發送郵件端口25”,outlook之所以能夠使用是因爲outlook的進程被加到“已排除進程”中。反垃圾郵件功能阻止了javaw.exe和telenet.exe對port 25的訪問!
取消掉對javaw.exe、java.exe和telenet.exe的阻止,telnet成功,發送郵件成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章