日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

用log4j將日志寫入數(shù)據(jù)庫以及應(yīng)用

系統(tǒng) 1672 0
以下為log4j中的配置參數(shù): ? ?
%m 輸出代碼中指定的消息
%p 輸出優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
%t 輸出產(chǎn)生該日志事件的線程名;
%n 輸出一個(gè)回車換行符,Windows平臺(tái)為"\r\n",Unix平臺(tái)為"\n"
%d 輸出日志時(shí)間的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,
比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2008年10月18日22:10:28:832
%c? 輸出所屬的類目,通常就是所在類的全名,如“iNotes.Default”;
%l? 輸出日志事件的發(fā)生位置,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)?
%L 輸出代碼中的行數(shù);
%F 輸出代碼中的文件名;
?
要注意大小寫

在Java工程下,日志文件(log4j.properties)要放在src目錄下,在web工程中,日志文件(log4j.properties)也要放在src根目錄下。
在Action中的代碼如下:
public class LoginUserAction extends Action {
?? private UserDao userDAO;
?? private static Logger log = Logger.getLogger(LoginUserAction. class );
?? /**
????* 獲得UserDAO的對(duì)象
????* @param userDAO
????*/

?? public void setUserDAO(UserDao userDAO) {
???? this .userDAO = userDAO;
??}
?? public ActionForward execute(ActionMapping mapping, ActionForm form,
??????HttpServletRequest request, HttpServletResponse httpservletresponse)
?????? throws Exception {
???? // 設(shè)置request的字符集
????request.setCharacterEncoding( "utf-8" );
????
????
????LoginUserForm loginform = (LoginUserForm) form;
????
????log.warn( "用戶:" +loginform.getUsername()+ "登陸" + "????????" + "IP:" +request.getRemoteAddr());
???? //調(diào)用方法獲得一個(gè)LoginUserForm
????loginform = (LoginUserForm)userDAO.getAccount(loginform);
???? return mapping.findForward( "success" );
??}
????
}
? private static Logger log = Logger.getLogger(LoginUserAction.class);
log.warn("用戶:"+loginform.getUsername()+"登陸"+"??? "+"IP:"+request.getRemoteAddr());


注意一下紅色的字,這兩行主要是與日志關(guān)聯(lián)的,第一紅行是建立一個(gè)日志對(duì)象,第二個(gè)紅行是要往數(shù)據(jù)庫中寫入的日志。

在log4j.properties中的代碼:
log4j.rootLogger=WARN,DATABASE

#直接使用log4j包中的文件
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#與數(shù)據(jù)庫建立連接
log4j.appender.DATABASE.URL=jdbc:mysql: //localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=icy
#指定要插入數(shù)據(jù)庫的格式,具體參數(shù)的格式看一開始給出的文檔
log4j.appender.DATABASE.sql=INSERT INTO log4j (log_date, log_level, location, message) VALUES ('%d{ISO8601}', '%p', '%C,%L', '%m')
這樣以來就可以向數(shù)據(jù)庫中寫入日志了。
一、介紹
Log4j是Apache的一個(gè)開放源代碼項(xiàng)目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件、甚至是套接口服務(wù) 器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過程。
Log4j由三個(gè)重要的組件構(gòu)成:日志信息的優(yōu)先級(jí),日志信息的輸出目的地,日志信息的輸出格式。日志信息的優(yōu)先級(jí)從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日志信息的重要程度;日志信息的輸出目的地指定了日志將打印到控制臺(tái)還是文件中;而輸出格式則控制了日志信息的顯示內(nèi)容。

二、配置文件
其實(shí)您也可以完全不使用配置文件,而是在代碼中配置Log4j環(huán)境。但是,使用配置文件將使您的應(yīng)用程序更加靈活。
Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。下面我們介紹使用properties格式做為配置文件的方法:
示例:
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

1. 配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志記錄的優(yōu)先級(jí),分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級(jí)別。Log4j建議只使用四個(gè)級(jí)別,優(yōu)先級(jí)從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這里定義的級(jí)別,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開關(guān)。比如在這里定義了INFO級(jí)別,則應(yīng)用程序中所有DEBUG級(jí)別的日志信息將不被打印出來。
appenderName就是指定日志信息輸出到哪個(gè)地方。您可以同時(shí)指定多個(gè)輸出目的地。

2. 配置日志信息輸出目的地Appender,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺(tái)),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
(1).ConsoleAppender選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺(tái)
(2).FileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
(3).DailyRollingFileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
DatePattern=’.'yyyy-ww:每周滾動(dòng)一次文件,即每周產(chǎn)生一個(gè)新的文件。當(dāng)然也可以指定按月、周、天、時(shí)和分。即對(duì)應(yīng)的格式如下:
? 1)’.'yyyy-MM: 每月
? 2)’.'yyyy-ww: 每周
? 3)’.'yyyy-MM-dd: 每天
? 4)’.'yyyy-MM-dd-a: 每天兩次
? 5)’.'yyyy-MM-dd-HH: 每小時(shí)
? 6)’.'yyyy-MM-dd-HH-mm: 每分鐘
(4).RollingFileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會(huì)被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達(dá)該大小時(shí),將會(huì)自動(dòng)滾動(dòng),即將原來的內(nèi)容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產(chǎn)生的滾動(dòng)文件的最大數(shù)。

3. 配置日志信息的布局,其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間、線程、類別等等信息)

4、輸出格式設(shè)置
在配置文件中可以通過log4j.appender.A1.layout.ConversionPattern設(shè)置日志輸出格式。
參數(shù):
%p: 輸出日志信息優(yōu)先級(jí),即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL,
%d: 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%r: 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)
%c: 輸出日志信息所屬的類目,通常就是所在類的全名
%t: 輸出產(chǎn)生該日志事件的線程名
%l: 輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10)
%x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中。
%%: 輸出一個(gè)”%”字符
%F: 輸出日志消息產(chǎn)生時(shí)所在的文件名稱
%L: 輸出代碼中的行號(hào)
%m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息
%n: 輸出一個(gè)回車換行符,Windows平臺(tái)為”\r\n”,Unix平臺(tái)為”\n”輸出日志信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對(duì)齊方式。如:
1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認(rèn)的情況下右對(duì)齊。
2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,”-”號(hào)指定左對(duì)齊。
3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會(huì)將左邊多出的字符截掉,但小于30的話也不會(huì)有空格。
4)%20.30c:如果category的名稱小于20就補(bǔ)空格,并且右對(duì)齊,如果其名稱長于30字符,就從左邊交遠(yuǎn)銷出的字符截掉。

三、在程序中的使用
在程序中使用Log4j之前,首先要將commons-logging.jar和logging-log4j-1.2.9.jar導(dǎo)入到classpath中,并將log4j.properties放于src根目錄中。接下來就可以使用了。

1.得到記錄器
使用Log4j,第一步就是獲取日志記錄器,這個(gè)記錄器將負(fù)責(zé)控制日志信息。其語法為:
public static Logger getLogger( String name),
通過指定的名字獲得記錄器,如果必要的話,則為這個(gè)名字創(chuàng)建一個(gè)新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () ) ;
注:推薦使用commons-logging結(jié)合log4j進(jìn)行日志記錄
private static Log logger = LogFactory.getLog(Yourclass.class);


2.插入記錄信息(格式化日志信息)
當(dāng)上兩個(gè)必要步驟執(zhí)行完畢,您就可以輕松地使用不同優(yōu)先級(jí)別的日志記錄語句插入到您想記錄日志的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;

四、Log4j比較全面的配置
LOG4J的配置之簡(jiǎn)單使它遍及于越來越多的應(yīng)用中了:Log4J配置文件實(shí)現(xiàn)了輸出到控制臺(tái)、文件、回滾文件、發(fā)送日志郵件、輸出到數(shù)據(jù)庫日志表、自定義標(biāo)簽等全套功能。擇其一二使用就夠用了。
Java代碼 復(fù)制代碼
  1. log4j.rootLogger=DEBUG,CONSOLE,A1,im ??
  2. log4j.addivity.org.apache= true ??
  3. #?應(yīng)用于控制臺(tái) ??
  4. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender ??
  5. log4j.appender.Threshold=DEBUG ??
  6. log4j.appender.CONSOLE.Target=System.out ??
  7. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout ??
  8. log4j.appender.CONSOLE.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n ??
  9. #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]?n%c[CATEGORY]%n%m[MESSAGE]%n%n ??
  10. #應(yīng)用于文件 ??
  11. log4j.appender.FILE=org.apache.log4j.FileAppender ??
  12. log4j.appender.FILE.File=file.log ??
  13. log4j.appender.FILE.Append= false ??
  14. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout ??
  15. log4j.appender.FILE.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n ??
  16. #?Use? this ?layout? for ?LogFactor? 5 ?analysis ??
  17. #?應(yīng)用于文件回滾 ??
  18. log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender ??
  19. log4j.appender.ROLLING_FILE.Threshold=ERROR ??
  20. log4j.appender.ROLLING_FILE.File=rolling.log? //文件位置,也可以用變量${java.home}、rolling.log ??
  21. log4j.appender.ROLLING_FILE.Append= true ? //true:添加?false:覆蓋 ??
  22. log4j.appender.ROLLING_FILE.MaxFileSize=10KB? //文件最大尺寸 ??
  23. log4j.appender.ROLLING_FILE.MaxBackupIndex= 1 ? //備份數(shù) ??
  24. log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout ??
  25. log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n ??
  26. ??
  27. #應(yīng)用于socket ??
  28. log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender ??
  29. log4j.appender.SOCKET.RemoteHost=localhost ??
  30. log4j.appender.SOCKET.Port= 5001 ??
  31. log4j.appender.SOCKET.LocationInfo= true ??
  32. #?Set?up? for ?Log?Facter? 5 ??
  33. log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout ??
  34. log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n ??
  35. ??
  36. #?Log?Factor? 5 ?Appender ??
  37. log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender ??
  38. log4j.appender.LF5_APPENDER.MaxNumberOfRecords= 2000 ??
  39. #?發(fā)送日志給郵件 ??
  40. log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender ??
  41. log4j.appender.MAIL.Threshold=FATAL ??
  42. log4j.appender.MAIL.BufferSize= 10 ??
  43. log4j.appender.MAIL.From=web @www .wuset.com ??
  44. log4j.appender.MAIL.SMTPHost=www.wusetu.com ??
  45. log4j.appender.MAIL.Subject=Log4J?Message ??
  46. log4j.appender.MAIL.To=web @www .wusetu.com ??
  47. log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout ??
  48. log4j.appender.MAIL.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n ??
  49. #?用于數(shù)據(jù)庫 ??
  50. log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender ??
  51. log4j.appender.DATABASE.URL=jdbc:mysql: //localhost:3306/test ??
  52. log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver ??
  53. log4j.appender.DATABASE.user=root ??
  54. log4j.appender.DATABASE.password= ??
  55. log4j.appender.DATABASE.sql=INSERT?INTO?LOG4J?(Message)?VALUES?(’[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n’) ??
  56. log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout ??
  57. log4j.appender.DATABASE.layout.ConversionPattern=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n ??
  58. ??
  59. log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender ??
  60. log4j.appender.A1.File=SampleMessages.log4j ??
  61. log4j.appender.A1.DatePattern=yyyyMMdd-HH’.log4j’ ??
  62. log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout ??
  63. #自定義Appender ??
  64. log4j.appender.im?=?net.cybercorlin.util.logger.appender.IMAppender ??
  65. log4j.appender.im.host?=?mail.cybercorlin.net ??
  66. log4j.appender.im.username?=?username ??
  67. log4j.appender.im.password?=?password ??
  68. log4j.appender.im.recipient?=?corlin @cybercorlin .net ??
  69. log4j.appender.im.layout=org.apache.log4j.PatternLayout ??
  70. log4j.appender.im.layout.ConversionPattern?=[framework]?%d?-?%c?-%-4r?[%t]?%-5p?%c?%x?-?%m%n??

用log4j將日志寫入數(shù)據(jù)庫以及應(yīng)用


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 宁蒗| 汤阴县| 广灵县| 洛阳市| 乌拉特中旗| 弋阳县| 龙里县| 海原县| 聂拉木县| 台湾省| 霍林郭勒市| 江北区| 顺昌县| 凤阳县| 台北市| 平乐县| 久治县| 徐闻县| 哈尔滨市| 莫力| 梅州市| 镇赉县| 江门市| 岐山县| 应用必备| 济南市| 肇东市| 咸丰县| 勐海县| 体育| 锡林浩特市| 莱州市| 贵州省| 和政县| 哈巴河县| 宝山区| 玛曲县| 临湘市| 长宁区| 资中县| 太和县|