1: บทนำสู่ log4j บทนำ
Log4j เป็นโครงการโอเพนซอร์สของ Apache รูปแบบเอาต์พุตของแต่ละบันทึก สิ่งที่น่าสนใจที่สุดคือสิ่งเหล่านี้สามารถกำหนดค่าได้อย่างยืดหยุ่นผ่านไฟล์การกำหนดค่าโดยไม่ต้องแก้ไขรหัสของแอปพลิเคชัน
นอกจากนี้ผ่านอินเทอร์เฟซภาษาอื่น ๆ Log4j คุณสามารถใช้ log4j ใน C, C ++, .NET, โปรแกรม PL/SQL ส่วนประกอบ ยิ่งกว่านั้นด้วยการใช้ส่วนขยายของบุคคลที่สามต่างๆคุณสามารถรวม Log4J เข้ากับ J2EE, JINI และแม้แต่แอปพลิเคชัน SNMP ได้อย่างง่ายดาย
2. ตัวอย่างเริ่มต้น
1. สร้างโครงการ Java ใหม่นำเข้าแพ็คเกจ log4j-1.2.17.jar และไดเรกทอรีสุดท้ายของโครงการทั้งหมดมีดังนี้
2. สร้างและตั้งค่า log4j.properties ในระดับเดียวกัน
### ตั้งค่า ###
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} วิธี:%l%n%m%n n
### บันทึกเอาต์พุตด้านบนระดับการดีบักถึง = e: //logs/error.log ###
log4j.appender.d = org.apache.log4j.dailyrollingFileAppender
log4j.appender.d.file = e: //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 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://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
3、设置日志内容
แพ็คเกจ com.mucfc; นำเข้า org.apache.log4j.logger;/** *@ผู้แต่ง linbingwen *@18 พฤษภาคม 2015 9:14:21 */การทดสอบระดับสาธารณะ คลาส); ::::::::::::::::::::::: กระทาน :::::::::::::: DEBUG ("นี่คือข้อความดีบั๊ก"); .error("This is error message.") ; } }4、输出结果
(1) ก่อนอื่นข้อมูลของคอนโซล
(2) ลองดูที่ไฟล์เอาต์พุต
เนื้อหามีดังนี้และพบว่ามันถูกส่งออกไปยังเอกสารที่เกี่ยวข้องตามที่ต้องการ
3. วิธีการใช้งานพื้นฐานของ log4j
log4j ประกอบด้วยสามองค์ประกอบที่สำคัญ: ลำดับความสำคัญของข้อมูลบันทึกปลายทางปลายทางของข้อมูลบันทึกและรูปแบบการส่งออกของข้อมูลบันทึก ลำดับความสำคัญของข้อมูลบันทึกมาจากความผิดพลาดสูงถึงต่ำ ไฟล์; และเอาต์พุตเป็นรูปแบบควบคุมเนื้อหาการแสดงผลของข้อมูลบันทึก
2.1.
ในความเป็นจริงคุณไม่สามารถใช้ไฟล์การกำหนดค่าได้เลย แต่กำหนดค่าสภาพแวดล้อม log4j ในรหัสของคุณ อย่างไรก็ตามการใช้ไฟล์การกำหนดค่าจะทำให้แอปพลิเคชันของคุณมีความยืดหยุ่นมากขึ้น log4j รองรับรูปแบบไฟล์การกำหนดค่าสองรูปแบบหนึ่งคือไฟล์รูปแบบ XML และอีกรูปแบบคือไฟล์คุณสมบัติ Java (key = value) ด้านล่างเราแนะนำวิธีการใช้ไฟล์ฟีเจอร์ Java เป็นไฟล์กำหนดค่า:
1. กำหนดค่าตัวบันทึกรูทไวยากรณ์คือ:
log4j.rootlogger = [ระดับ], appenderName, appenderName, ...
ในหมู่พวกเขาระดับคือลำดับความสำคัญของการตัดไม้แบ่งออกเป็นปิด, ตาย, ข้อผิดพลาด, เตือน, ข้อมูล, การดีบัก, ทั้งหมดหรือระดับที่คุณกำหนด Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。 ตามระดับที่กำหนดไว้ที่นี่คุณสามารถควบคุมสวิตช์ไปยังระดับข้อมูลบันทึกที่สอดคล้องกันในแอปพลิเคชัน ตัวอย่างเช่นหากระดับข้อมูลถูกกำหนดไว้ที่นี่ข้อมูลบันทึกระดับการดีบักทั้งหมดในแอปพลิเคชันจะไม่ถูกพิมพ์ออกมา AppEnderName หมายถึงตำแหน่งที่ข้อมูลบันทึก B ถูกส่งออกไป คุณสามารถระบุจุดหมายปลายทางเอาต์พุตหลายรายการในเวลาเดียวกัน
2. กำหนดค่า Appender ปลายทางเพื่อส่งออกข้อมูลบันทึกและไวยากรณ์คือ:
log4j.appender.appenderName = fulllified.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = ค่า 1
-
log4j.appender.appenderName.option = valuen
ในหมู่พวกเขา Appenders ที่จัดทำโดย log4j มีดังนี้:
org.apache.log4j.consoleappender (คอนโซล)
org.apache.log4j.FileAppender (ไฟล์)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
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有以e几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.ttcclayout (รวมถึงเวลาเธรดหมวดหมู่ ฯลฯ ของการสร้างบันทึก)
log4j ใช้รูปแบบการพิมพ์คล้ายกับฟังก์ชั่น printf ในภาษา C เพื่อจัดรูปแบบข้อมูลบันทึกและพารามิเตอร์การพิมพ์มีดังนี้: %m ข้อความที่ระบุในรหัสเอาต์พุต
ลำดับความสำคัญของเอาต์พุต P, เช่นการดีบัก, ข้อมูล, เตือน, ข้อผิดพลาด, ร้ายแรง
%R เอาต์พุตจำนวนมิลลิวินาทีที่ใช้ตั้งแต่เริ่มต้นแอปพลิเคชันเพื่อส่งออกข้อมูลบันทึก
%C เอาต์พุตหมวดหมู่โดยปกติจะเป็นชื่อเต็มของคลาสที่อยู่ในตำแหน่ง
%t 输出产生该日志事件的线程名
%n เอาท์พุทการแบ่งสายคืนรถแพลตฟอร์ม Windows คือ "RN", แพลตฟอร์ม Unix คือ "N"
%D ส่งออกวันที่หรือเวลาของเวลาบันทึก : 18 ตุลาคม 2545 22:10:28, 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
2.2. ใช้ log4j ในรหัส
1. รับเครื่องบันทึก
การใช้ log4j ขั้นตอนแรกคือการรับบันทึกบันทึกซึ่งจะรับผิดชอบในการควบคุมข้อมูลบันทึก ไวยากรณ์คือ:
Public Static Logger GetLogger (ชื่อสตริง)
รับเครื่องบันทึกด้วยชื่อที่ระบุและหากจำเป็นให้สร้างตัวบันทึกใหม่สำหรับชื่อ ชื่อโดยทั่วไปมีชื่อในชั้นเรียนนี้เช่น:
Logger Logger แบบคงที่ = logger.getLogger (ServerWithLog4j.class.getName ())
2. อ่านไฟล์กำหนดค่า
หลังจากได้รับ logger ขั้นตอนที่สองจะกำหนดค่าสภาพแวดล้อม log4j ด้วยไวยากรณ์เป็น:
BasicConfigurator.Configure (): โดยอัตโนมัติและใช้สภาพแวดล้อม LOG4J เริ่มต้นโดยอัตโนมัติ
PropertyConfigurator.Configure (สตริง configfilename): อ่านไฟล์การกำหนดค่าที่เขียนโดยใช้ไฟล์คุณสมบัติของ Java
domconfigurator.configure (ชื่อไฟล์สตริง): อ่านไฟล์การกำหนดค่าในรูปแบบ XML
3. แทรกข้อมูลบันทึก (ข้อมูลบันทึกรูปแบบ)
เมื่อสองขั้นตอนที่จำเป็นก่อนหน้านี้เสร็จสิ้นคุณสามารถแทรกคำสั่งการบันทึกที่มีระดับลำดับความสำคัญที่แตกต่างกันได้ทุกที่ที่คุณต้องการเข้าสู่ระบบ
logger.debug (ข้อความวัตถุ);
logger.info (ข้อความวัตถุ);
logger.warn (ข้อความวัตถุ);
logger.error (ข้อความวัตถุ);
2.3.
แต่ละตัวบันทึกจะอยู่ภายใต้ระดับบันทึก (ระดับบันทึก) เพื่อควบคุมเอาต์พุตของข้อมูลบันทึก ระดับบันทึกแบ่งออกเป็น:
ตอบ: ปิดระดับสูงสุดเพื่อปิดการบันทึกทั้งหมด
B: Fatal บ่งชี้ว่าเหตุการณ์ข้อผิดพลาดที่สำคัญแต่ละครั้งจะทำให้แอปพลิเคชันออกจาก
C: ข้อผิดพลาดบ่งชี้ว่าแม้ว่าเหตุการณ์ข้อผิดพลาดจะเกิดขึ้น แต่ก็ยังไม่ส่งผลกระทบต่อการทำงานอย่างต่อเนื่องของระบบ
D: Warm ระบุว่าจะมีสถานการณ์ข้อผิดพลาดที่อาจเกิดขึ้น
E: ข้อมูลโดยทั่วไปและในระดับหยาบมันเน้นการทำงานทั้งหมดของแอปพลิเคชัน
F: การดีบักโดยทั่วไปจะใช้ในระดับละเอียดและมีประโยชน์มากสำหรับการดีบักแอปพลิเคชัน
G: ระดับต่ำสุดทั้งหมดใช้เพื่อเปิดการบันทึกทั้งหมด
上面这些级别是定义在org.apache.log4j.Level类中。 log4j แนะนำให้ใช้ 4 ระดับโดยมีลำดับความสำคัญจากสูงถึงต่ำข้อผิดพลาดเตือนข้อมูลและการดีบัก โดยใช้ระดับบันทึกคุณสามารถควบคุมผลลัพธ์ของข้อมูลบันทึกที่ระดับที่สอดคล้องกันในแอปพลิเคชัน ตัวอย่างเช่นหากใช้ B ข้อมูลบันทึกทั้งหมดต่ำกว่าระดับข้อมูล (เช่นการดีบัก) ในแอปพลิเคชันจะไม่ถูกพิมพ์ออกมา
4. ใช้อินสแตนซ์ log4j ในโครงการเว็บ
รหัสข้างต้นอธิบายแอปพลิเคชันง่าย ๆ ของ log4j และในความเป็นจริงการใช้ log4j นั้นง่ายและสะดวกมาก แน่นอนนอกเหนือจากวิธีการกำหนดค่าข้างต้นมีสิ่งอื่น ๆ เช่นการสร้างแอปพลิเคชัน J2EE ใน web.xml
1. การใช้งาน log4j ของเว็บแอปพลิเคชันโดยทั่วไปใช้: สร้าง servlet ใหม่ซึ่งดำเนินการกำหนดค่าสำหรับ log4j ในฟังก์ชั่น init โดยทั่วไปคือการอ่านไฟล์การกำหนดค่า ดังนั้นคุณต้องกำหนดค่า servlet นี้ใน web.xml และตั้งค่าการโหลด-เปิดเป็น 1
2. การกำหนดค่า servlet นี้ log4j คือการอ่านไฟล์การกำหนดค่าจากนั้นเรียกใช้ฟังก์ชันการกำหนดค่า มีคำถามสองข้อที่นี่: 1. คุณต้องรู้ว่าไฟล์อยู่ที่ไหน
3. ตำแหน่งไฟล์การกำหนดค่าสามารถกำหนดค่าได้ใน web.xml
4. โดยทั่วไปมีสองประเภทของไฟล์ประเภทหนึ่งคือไฟล์คุณสมบัติ Java และอื่น ๆ คือไฟล์ XML
เนื้อหาทั่วไปของไฟล์การกำหนดค่า: log4j สามารถระบุระดับต่ำสุดของระดับบันทึกเอาต์พุตรวมถึงรูปแบบการกำหนดค่าเอาต์พุตของบันทึก
(1) สร้างโครงการเว็บไดเรกทอรีสุดท้ายของโครงการทั้งหมดมีดังนี้
(2) การกำหนดค่า web.xml มีดังนี้:
<? xml version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http: // java // .sun.com/xml/ns/javaee "xsi: schemalocation =" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_00 .xsd "id =" webapp_id "เวอร์ชัน =" 3.0 "> <plall-name> loglearning </display-name> <servlet> <servlet-name> log4jtestservlet </servlet-name> <servlet-cl . </servlet-class> <init-Param> <param-name> log4j-properties-location </param-name> <param-value> /web-inf/classes/log4j.properties </param-value> <// init -param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> log4jtestservlet </servlet-name> <url-pattern>/ทดสอบ <// url -pattern> </servlet-mapping> </eb-app>
(3) ไฟล์กำหนดค่า log4j.properties
### ตั้งค่าระดับบันทึก ###
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} วิธี:%l%n%m%n n
log4j.appender.d = org.apache.log4j.dailyrollingFileAppender
log4j.appender.d.file = f: //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 n
log4j.appender.e = org.apache.log4j.dailyrollingFileAppender
log4j.appender.e.file = f: //logs/error.log
log4j.appender.E.Append = true
log4j.appender.e.threshold = ข้อผิดพลาด
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
(4) Servlet เริ่มต้นทันทีที่เว็บคอนเทนเนอร์มาถึง
log4jinitservlet.javapackage com.mucfc; ; * คลาสการใช้งาน servlet log4jinitservlet */ @webservlet ("/ log4jinitservlet") คลาสสาธารณะ log4jinitservlet ขยาย httpservlet {ส่วนตัวคงที่ long reaalversionuid = 1l; ); "); สตริง log4jlocation = config.getInitParameter (" log4j-properties-location "); servletContext sc = config.getServletContext (); ถ้า (log4jlocation == nul l) {system.err.println (" *** ไม่มี log4j- คุณสมบัติการเริ่มต้นคุณสมบัติการวางตำแหน่งดังนั้นให้ใช้ BasicConfigurator เพื่อเริ่มต้น "); BasicConfigurator.Configure ();} else {String WebAppPath = Sc.getRealPath ("/"); String log4jprop = WebAppPath + l og4jlocation ไฟล์ ) ถ้า (yomamayesthissaysyomama .exists ()) {system.out.println ("ใช้:" + log4jprop + "เริ่มต้นข้อมูลการตั้งค่าการบันทึก"); ** " + log4jprop +" ไฟล์ไม่พบดังนั้นจึงเริ่มต้นด้วย BasicConfigurator "); BasicConfigurator.Configure ();}} super.init (config);} /*** @See httpservlet#doget การตอบสนอง httpservleSsesponse) */ การป้องกันโมฆะ doGet (คำขอ httpservletrequest, การตอบสนอง httpservletresponse) พ่น servletexception, ioexception {// toDo วิธีที่สร้างขึ้นอัตโนมัติ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) โยน s servletexception, ioexception {// todo วิธีการที่สร้างอัตโนมัติ stub}}}}โทร log4jtestservlet, java
แพ็คเกจ com.mucfc; http .httpservletrequest; serialversionuid = 1l; * * * @See Servlet#init (servletConfig) */ public void init (servletconfig config) พ่น servletexception {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub}/ ** * @ ดู httpservlet#doget Void Doget ที่ได้รับการป้องกัน (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {// บันทึกการดีบักระดับข้อมูลบันทึกข้อมูล logger.debug ("นี่คือการดีบัก M ESSAGE"); ข้อความ "); // บันทึกข้อผิดพลาดระดับข้อมูล logger.error (" นี่คือข้อความแสดงข้อผิดพลาด ");} / ** * @See httpservlet#dopost (คำขอ httpservletrequest, การตอบกลับ httpservletResponse) * การตอบสนอง httpservletresponse) พ่น Servletexception, ioexception {doGet (คำขอ, การตอบสนอง);ถัดไปกำลังทำงานมาดูผลลัพธ์:
ผลลัพธ์ผลลัพธ์:
5. ใช้ log4j ในฤดูใบไม้ผลิ
ที่นี่เราจำเป็นต้องใช้การใช้สปริงในโครงการเว็บเพื่อใช้ log4j
(1) เชื่อมต่อกับโครงการด้านบนแล้วนำเข้าแพ็คเกจสปริง
(2) เพิ่ม web.xml
<!-ตั้งค่าไดเรกทอรีรูท-> <context-param> <param-name> webapprootkey </param-name> <param-value> webapp.root </param-value> </context-param> param> <param-name> log4jconfiglocation </param-name> <param-value> /web-inf/classes/log4j.properties </param-value> </context-param> เธรดสแกนไฟล์การกำหนดค่าจะเปลี่ยนไปทุก ๆ 60 วินาที; > </context-param> <ผู้ฟัง> <Sistener-Lass> org.springframework.web.util.log4jconfiglistener </listener-class> </sarenter>
เนื้อหาทั้งหมดมีดังนี้:
<? xml version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http: // java // .sun.com/xml/ns/javaee "xsi: schemalocation =" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_00 .xsd "id =" webapp_id "เวอร์ชัน =" 3.0 "> <plall-name> loglearning </display-name> <servlet> <servlet-name> log4jtestservlet </servlet-name> <servlet-cl . log4jtestservlet </servlet-class> </servlet> <!-servlet ที่ใช้เพื่อเริ่มต้น log4jconfiglocation-> <!-<servlet> <servlet-name> mucfc.log4jinitservlet </servlet-class> <int-param> <param-name> log4j-properties-location </param-name> <param-value>/web-inf/classes/log4j.p roperties </param- value> </itri-param> <load-on-startup> 1 </load-on-startup> </servlet>-> <servlet-mapping> <servlet-name> log4jtestservlet </servlet-name> <url -รูปแบบ>/ทดสอบ </url-pattern> </servlet-mapping> <!-การโหลดคอนเทนเนอร์สปริง-> <ผู้ฟัง> <Sistener-class> org.springframework.web.context.contextloaderListener <รายการ Ener-Class-Class > </listener> <context-param> <param-name> contextConfigLocation </param-name> <param-value> classpath: applicationcontext.xml </param-value> </context-par am> <! Root Directory--> <context-Param> <param-Name> WebApprootkey </param-name> <param-value> webapp.root </param-value> </context-param> <context-param> ชื่อ> log4jconfiglocation </param-name> <param-value> /web-inf/classes/log4j.properties </param-value> </context-param> <!-3000 หมายถึงการเปิดเธรด Watchdog ไฟล์ทุก 60 วินาทีเปลี่ยนแปลง; Param> <Sistener> <Sistener-Lass> org.springframework.web.util.log4jconfiglistener </listener-class> </listener> </eb-app>
ที่นี่ log4jinitservlet.java เทียบเท่ากับไร้ประโยชน์
(2) ApplicationContext.xml
ไม่มีเนื้อหา:
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org" /2001/xmlschema-instance "xmlns: context =" http://www.springframework.org/schema/context "xmlns: aop =" http://www.springframework.org/sche ma/aop "xsi: xsi "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework . "> </ Beans>
(3) ด้วยวิธีนี้บันทึกจะเริ่มต้นด้วยหน้าต่างฤดูใบไม้ผลิ
เมื่อโปรแกรมทำงานแล้วบันทึกจะถูกพิมพ์โดยอัตโนมัติ
log.log
Error.log ว่างเปล่าเพราะพิมพ์ข้อมูลเหนือระดับข้อผิดพลาดเท่านั้น
ป้อน http: // localhost: 8080/loglearning2/ทดสอบโดยเบราว์เซอร์
จากนั้นเปิดไฟล์
การสอนโดยละเอียดเกี่ยวกับ Java Log4j อยู่ที่นี่