[Java] Log4j hello world example
Bài đăng này đã không được cập nhật trong 3 năm
Bài hướng dẫn này, chúng tôi sẽ giới thiệu cho các bạn cách sử dụng log4j 1.2.x để log error hoặc debug message trong Java.
1. Project Directory
2. Tải Log4j Khai báo dependencies:
pom.xml
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
3. log4j.properties
Tao file log4j.properties
và đặt nó vào trong thư mục resource (minh hoạ ở bước 1)
Chú ý:
1.Với standard alone app, hãy chắc chắn rằng `log4j.properties` nằm ở trong thư mục `project/classes`
2.Với Java web application, `log4j.properties` phải nằm trong thư mục `WEB-INF/classses`
log4j.properties
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Chú ý: Để hiểu về `ConversionPattern`, xem thêm [log4j PatternLayout guide](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html)
Giải thích một tí: 1. %d{yyyy-MM-dd HH:mm:ss} là định dạng năm tháng ngày 2. %-5p là độ ưu tiên của logger 3. %c{1} là tên của logger 4. %L là số lượng dòng đc in ra của logger 5. %m%n là nội dung message và thêm dấu xuống dòng
4. Demo
Đầu tiên tạo một final static
logger và đặt tên cho nó. Thông thường thì dùng package name.
final static Logger logger = Logger.getLogger(classname.class);
Sau đó, log ra message với những độ ưu tiên khác nhau từ debug, info, warn, error, fatal. Thông thường bạn chỉ cần debug và error
//logs a debug message
if(logger.isDebugEnabled()){
logger.debug("This is debug");
}
//logs an error message with parameter
logger.error("This is error : " + parameter);
//logs an exception thrown from somewhere
logger.error("This is error", exception);
4.1 Logger set debug priority
log4j.properties
log4j.rootLogger=DEBUG, stdout
#...
HelloExample.java
package com.mkyong;
import org.apache.log4j.Logger;
public class HelloExample{
final static Logger logger = Logger.getLogger(HelloExample.class);
public static void main(String[] args) {
HelloExample obj = new HelloExample();
obj.runMe("mkyong");
}
private void runMe(String parameter){
if(logger.isDebugEnabled()){
logger.debug("This is debug : " + parameter);
}
if(logger.isInfoEnabled()){
logger.info("This is info : " + parameter);
}
logger.warn("This is warn : " + parameter);
logger.error("This is error : " + parameter);
logger.fatal("This is fatal : " + parameter);
}
}
Output
2014-07-02 20:52:39 DEBUG HelloExample:19 - This is debug : mkyong
2014-07-02 20:52:39 INFO HelloExample:23 - This is info : mkyong
2014-07-02 20:52:39 WARN HelloExample:26 - This is warn : mkyong
2014-07-02 20:52:39 ERROR HelloExample:27 - This is error : mkyong
2014-07-02 20:52:39 FATAL HelloExample:28 - This is fatal : mkyong
4.2 Logger set error priority
log4j.properties
log4j.rootLogger=ERROR, stdout
#...
Chạy HelloExample
một lần nữa và bạn sẽ thấy output
2014-07-02 20:56:02 ERROR HelloExample:27 - This is error : mkyong
2014-07-02 20:56:02 FATAL HelloExample:28 - This is fatal : mkyong
Nếu một priority được khai báo trong log4j.properties
, chỉ có message có độ ưu tiên cao hơn hoặc bằng nó mới đc in ra output.
5. Demo - Log an Exception Ví dụ dưới đây show cách sử dụng log4j để log exception
HelloExample2.java
package com.mkyong;
import org.apache.log4j.Logger;
public class HelloExample2{
final static Logger logger = Logger.getLogger(HelloExample2.class);
public static void main(String[] args) {
HelloExample2 obj = new HelloExample2();
try{
obj.divide();
}catch(ArithmeticException ex){
logger.error("Sorry, something wrong!", ex);
}
}
private void divide(){
int i = 10 /0;
}
}
Output
2014-07-02 21:03:10 ERROR HelloExample2:16 - Sorry, something wrong!
java.lang.ArithmeticException: / by zero
at com.mkyong.HelloExample2.divide(HelloExample2.java:24)
at com.mkyong.HelloExample2.main(HelloExample2.java:14)
Nguồn: http://www.mkyong.com/logging/log4j-hello-world-example/
All rights reserved