Log4j

Tùy chỉnh cấp độ ghi

Log4j 2 cho phép người phát triển phần mềm tự định nghĩa cấp độ ghi nhật ký. Một trình sinh mã (source code generator tool) được cung cấp để giúp tạo ra Bộ ghi (Logger) hỗ trợ nhận biết cấp độ tùy chỉnh của người dùng so với các mức định sẵn. Cấp độ tùy chỉnh này có thể dùng để bổ sung hoặc thay thế các cấp độ sẵn có.

Ví dụ cho Log4j 2

<?xml version="1.0" encoding="UTF-8"?><Configuration status="trace" monitorInterval="60">
  <Properties>
    <Property name="filename">target/test.log</Property>
  </Properties>
 
  <Appenders>
    <Console name="STDOUT">
      <PatternLayout pattern="%d %p %c{1.} [%t] %m%n"/>
    </Console>

    <File name="file" fileName="${filename}">
      <PatternLayout>
        <pattern>%d %p %c{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>
 
  <Loggers> 
    <!--          Các bộ ghi có không gian tên là 'org.springframework' chỉ ghi các mẫu nhật ký ở cấp độ "INFO" hoặc cao hơn;         nếu bạn gọi Bộ ghi sử dụng tên lớp (ví dụ: Logger.getLogger(AClass.class))         và nếu AClass thuộc về  gói org.springframework, nó cũng thuộc vào trường hợp này    -->
    <Logger name="org.springframework" level="info" additivity="false" />

    <!--        Ví dụ về Bộ lọc: với những bộ ghi thuộc không gian tên 'com.mycompany.myproduct',        các mẫu nhật ký thuộc cấp bậc "DEBUG" hay cao hơn có dữ liệu ThreadContextMap chứa        cặp khóa-giá trị (key-value) "test=123", cũng sẽ gởi mẫu nhật ký đến Bộ nối "STDOUT".    -->
    <Logger name="com.mycompany.myproduct" level="debug" additivity="true">
      <ThreadContextMapFilter>
        <KeyValuePair key="test" value="123"/>
      </ThreadContextMapFilter>
      <AppenderRef ref="STDOUT"/>
    </Logger>
 
    <!--        Mặc định, tất cả mẫu nhật ký có cấp "TRACE" hoặc cao hơn sẽ được ghi lại.        Mẫu nhật ký sau đó sẽ được gởi tới bộ nối "file" và        mẫu nhật ký có cấp "ERROR" hoặc cao hơn sẽ được gởi tới bộ nối "STDOUT".    -->
    <Root level="trace">
      <AppenderRef ref="file"/>
      <AppenderRef ref="STDOUT" level="error"/>
    </Root>
  </Loggers>
 
</Configuration>

Ví dụ cho Log4j 1.2

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration PUBLIC "-//LOGGER" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"><log4j:configuration>
    <!--          bộ nối định ra đầu ra cho trình ghi nhật ký, là màn hình điều khiển hoặc là một tập tin nào đó;         tên cho bộ nối được chọn tùy ý.    -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
        </layout>
    </appender>
 
    <!--          Bộ ghi ở thư mục 'org.springframework' chỉ ghi các mẫu nhật ký có cấp "INFO" hoặc cao hơn;         nếu bạn sử dụng các bộ ghi có bằng cách gọi tên của nó (ví dụ: Logger.getLogger(AClass.class))         và nếu AClass nằm trong gói org.springframework, nó cũng thuộc về thư mục này    -->
    <logger name="org.springframework">
        <level value="info"/>
    </logger>

    <!--          mọi thứ nằm trong Spring được xét ở cấp "INFO" nhưng với lớp          PropertyEditorRegistrySupport ta muốn ghi nhật ký ở cấp "DEBUG"     -->
    <logger name="org.springframework.beans.PropertyEditorRegistrySupport">
        <level value="debug"/>
    </logger>
 
    <logger name="org.acegisecurity">
        <level value="info"/>
    </logger>
    
    
    <root>
        <!--             Tất cả mẫu nhật ký có cấp "DEBUG" hoặc cao hơn sẽ được ghi lại, nếu không được định nghĩa riêng             tất cả thông điệp nhật ký sẽ được gởi tới bộ nối "stdout", nếu không được định nghĩa riêng        -->
        <level value="debug" />
        <appender-ref ref="stdout" />
    </root></log4j:configuration>