在项目中,一般都是把日志记录到一个日志文件中。
对应的log4j2.xml内容如下图所示:只有一个RollingFile节点,整个系统只会生成一个log日志文件。
生成的日志文件如下图:
当系统不断扩大,业务越来越复杂,所有接口或者方法的日志内容都放在一个文件中,内容比较乱,不方便查看。
这时候就考虑把日志拆分成多个文件,不同的业务内容放到不同的日志文件中。
修改后的log4j2.xml内容如下:
- "1.0" encoding="UTF-8"?>
- xml>
- <configuration status="DEBUG" monitorInterval="600">
- <properties>
- <property name="LOG_HOME">D:/webbase/logsproperty>
- <property name="LOG_BACK_HOME">${LOG_HOME}/backupproperty>
- properties>
- <Appenders>
- <Console name="Console" target="SYSTEM_OUT">
- <PatternLayout
- pattern="%d{HH:mm:ss.SSS} {%t} %-5level %logger{36} - %msg%n" />
- Console>
-
-
-
- <RollingFile name="AllLog"
- fileName="${LOG_HOME}/Web/Log-${date:yyyy-MM-dd}-newest.log"
- filePattern="${LOG_HOME}/Web/backup/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i-newest.log"
- append="true">
-
- <PatternLayout
- pattern="%r %d [%t] %-5p %c - %m%n%n" />
-
- <Policies>
- <SizeBasedTriggeringPolicy size="20MB" />
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
- Policies>
- <Filters>
- <ThresholdFilter level="ALL" onMatch="ACCEPT"
- onMismatch="DENY" />
- Filters>
- <DefaultRolloverStrategy max="100" />
- RollingFile>
-
-
- <RollingFile name="InvoiceRollingFile"
- fileName="${LOG_HOME}/Invoice/Log-${date:yyyy-MM-dd}-invoice.log"
- filePattern="${LOG_HOME}/Invoice/backup/invoice/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}-%i-invoice.log"
- append="true">
-
- <PatternLayout
- pattern="%r %d [%t] %-5p %c - %m%n%n" />
-
- <Policies>
- <SizeBasedTriggeringPolicy size="20MB" />
- <TimeBasedTriggeringPolicy interval="1"
- modulate="true" />
- Policies>
- <Filters>
- <ThresholdFilter level="ALL" onMatch="ACCEPT"
- onMismatch="DENY" />
- Filters>
- <DefaultRolloverStrategy max="100" />
- RollingFile>
-
-
- Appenders>
- <Loggers>
-
- <Root level="debug">
- <AppenderRef ref="AllLog" />
- <AppenderRef ref="Console" />
- Root>
-
-
-
- <Logger name="InvoiceLogger" additivity="false" level="debug">
- <appender-ref ref="InvoiceRollingFile" level="debug" />
- Logger>
-
-
- Loggers>
-
-
-
- configuration>
文件内容解读:
以上配置表达的是,系统整体日志使用一个文件记录,发票接口使用一个文件记录。同时发票接口日志的信息不会记录到整体的日志里面,这是由Logger节点的additivity属性决定的(additivity 属性配置为 false,则这个logger不会将日志流反馈到root中)。
如果有其他接口或者类,仿照InvoiceRollingFile,单独添加对应的RollingFile节点和Logger节点。这两个节点是一 一对应的,只要新加了RollingFile,就需要在下面配上Logger,同时Logger节点的 appender-ref属性中ref的值需要与RollingFile节点的name属性值保持一致。
记录log信息的代码示例:
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
-
- private static final Logger logger = LogManager.getLogger("InvoiceLogger");
-
- logger.info("我是info级别的日志信息");
InvoiceLogger对应的是log4j2.xml配置文件中,Logger节点name属性值。
按照以上方式配置后,生成的日志文件就会是下面这个样子的
如果要找发票接口相关的日志,就在Invoice文件夹中找对应日期的文件。查找其他日志内容,在Web文件夹中查找(Invoice、Web,是在log4j2.xml配置文件中fileName节点进行配置的)。