Hướng dẫn config log4j version 2 cho web application trên tomcat.

Ở Việt Nam hầu hết anh em developer là làm ở các cty outsourcing. Nơi mà hầu hết các dự án khi vào thì các cấu trúc của 1 con dự án đã được dựng lên hay theo cấu truc của khách hàng và mình phải theo cấu trúc đó. Chính vì vậy mọi người thường không có, hay ít kinh nghiệm trong việc build các thành phần tối thiểu cần phải có của 1 dự án.

Logging chính là 1 phần không thể thiếu trong các dự án. Với sự ra đời của Log4j version 2, việc thiết lập để đưa logging vào 1 dự án khá là đơn giản. Log4j 2.x có thể đáp ứng gần như là tất cả các yêu cầu về quản lý log cho 1 dự án.

Bài viết này của mình sẽ hướng dẫn mọi người cách config log4j cho 1 java web application với tiêu chí đơn giản. Sau khi làm theo hướng dẫn cơ bản này, mọi người sẽ có khung ban đầu và có thể nhanh chóng thử và làm theo các hướng dẫn nâng cao khác ở trên mạng. Có thể trong tương lai gần mình sẽ viết hướng dẫn và giải thích chi tiết các tính năng nâng cao của log4j 2.x. Giờ hãy bắt đầu với việc tạo 1 khung có thể chạy và thực hành log4j 2.x

1. Yêu cầu về người đọc:

Để có thể đọc và làm theo hướng dẫn này người đọc cần có kiến thức về:

  • java
  • apache maven
  • các khái niệm log
  • apache tomcat

2. Giới thiệu về log4j version 2

  • Muốn sử dụng các tính năng tiện ích cho quản lý log như rolling file , zip file, format nội dung, filter thì java logging , commons logging cũng như log4j 1.x là không đủ. Vì vậy các thư viện log khác như slf4j và logback ra đời.
  • Log4j version 1 là thư viện core của hầu hết các thư viện log này. Đến tháng 7-2014 version log4j 2.0 được release bản ổn định và đầy đủ. Thời điểm tạo bài viết này version mới nhất là 2.4.1
  • Log4j version 2 ra đời nhằm khắc phục các nhược điểm của version 1, có đẩy đủ tính năng nâng cao như logback, cải thiện về perfomance, dễ cấu hình.

3. Yêu cầu môi trường:

  • Log4j 2.x làm việc tốt nhất với servler 3.0 hoặc cao hơn
  • Tomcat 7.0.43 hoặc cao hơn
  • Log4j version 2.4 trở lên yêu cầu java 7 hoặc cao hơn
  • Log4j version 2.3 trở xuống yêu cầu java 6

4. Cấu hình cho web application chạy trên tomcat (Simple config):

4.1 Tạo maven web application

  • Bạn có thể sử dụng các IDE tool như Eclipse hoặc Intellij hoặc tạo 1 cấu trúc web từ web archetype do maven cung cấp sẵn, bằng cách chạy lệnh:

    mvn archetype:generate -DgroupId=com.atula.guide -DartifactId=log4j2- demo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Cấu trúc của project sẽ như ảnh sau: web structure.png

4.2 Thiết lập phụ thuộc- thư viên ( add dependency ) cho log4j

Thêm đoạn code dưới đây vào file pom.xml trong thư mục dự án của bạn, 2 thư viện chính của log4j là log4j-api và log4j-core sẽ được download về:

    `<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.3</version>
    </dependency>`

4.3 Cấu hình log4j trong web.xml

Chú ý là với servlet 2.5 thiết lập sẽ có vài khác biệt.

`<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>log4j2.xml</param-value>
</context-param>`

4.4 Tạo log4j2.xml file cấu hình cho log4j trong resouces folder

`<?xml version="1.0" encoding="UTF-8"?>

<configuration strict="true">

<appenders>
    <appender type="Console" name="STDOUT">
        <layout type="PatternLayout" pattern="%d %-5p %c - %m%n"/>
    </appender>
    <appender type="File" name="File" fileName="D:\logs\web-log-test.log">
        <layout type="PatternLayout">
            <pattern>%d %-5p %c - %m%n</pattern>
        </layout>
    </appender>
</appenders>

<loggers>
    <logger name="org.apache.jsp" level="debug">
        <appender-ref ref="File"/>
    </logger>
    <root level="trace">
        <appender-ref ref="STDOUT"/>
    </root>
</loggers>
</configuration>`

4.5 Tạo 1 file jsp để test kết quả

jsp.png

Chú ý: log4j version 2 tạo ra Log4j Tag Library: cái mà có thể sử dụng lệnh log trên trang JSP mà không cần Java scripting.

Xem thêm ở link: https://logging.apache.org/log4j/2.x/log4j-taglib/index.html

4.6 Tạo file war để deploy trên tomcat

Done! Bạn có thể test và check nội dung của file log ngay bây giờ

5. Source code

https://bitbucket.org/atulaa1/log4j-guide

6. Link tham khảo:

https://logging.apache.org/log4j/2.x/changes-report.html#a1.0-alpha1 https://logging.apache.org/log4j/2.x/manual/webapp.html https://logging.apache.org/log4j/2.x/log4j-taglib/tagreference.html

P/S: Góp ý của cá nhân mình: cái editor tool khi soạn thảo bài viết cực lởm và stupid. Đội phát triển con Viblo này nên nghiên cứu config hoặc sử dụng 1 tool khác thay thế