如何通过log4j2.xml配置拆分日志文件实现业务日志分类管理
在项目中,一般都是把日志记录到一个日志文件中。

对应的 log4j2.xml 内容呈现如下:其中仅有一个 RollingFile 节点,整个系统在运行过程中只会产出一个 log 日志文件。
生成的日志文件如下图:
系统不断扩大,业务变得越来越复杂。所有接口或者方法的日志内容都被放在一个文件里,这样导致内容比较混乱,查看起来很不方便。
这时候要考虑将日志进行拆分,拆分成多个文件。不同的业务内容,要分别放到不同的日志文件里。
修改后的log4j2.xml内容如下:
D:/webbase/logs
${LOG_HOME}/backup
文件内容解读:
系统整体日志通过一个文件来记录,发票接口则使用另一个文件记录。并且,发票接口日志的信息不会被记录到整体的日志当中,这是因为 Logger 节点的 additivity 属性所决定的,当 additivity 属性配置为 false 时,这个 logger 就不会将日志流反馈到 root 中。
如果存在其他接口或者类,那就仿照 InvoiceRollingFile 这样做。单独增添与之对应的 RollingFile 节点以及 Logger 节点。这两个节点存在一一对应的关系。如果新增了 RollingFile,那么就必须在其下方配备 Logger。并且,Logger 节点的 appender-ref 属性中 ref 的值要与 RollingFile 节点的 name 属性值保持相同。
记录log信息的代码示例:
引入 org.apache.logging.log4j 包中的 LogManager 类。
引入 org.apache.logging.log4j.Logger;将 org.apache.logging.log4j.Logger 进行引入;对 org.apache.logging.log4j.Logger 进行导入;把 org.apache.logging.log4j.Logger 给引入进来;使 org.apache.logging.log4j.Logger 被引入;让 org.apache.logging.log4j.Logger 得以引入。
静态私有常量 logger 由 LogManager 获取,其对应的名称为 "InvoiceLogger"。
logger.info("我是info级别的日志信息");
InvoiceLogger 对应的是在 log4j2.xml 配置文件里的 Logger 节点的 name 属性值。
按照以上方式配置后,生成的日志文件就会是下面这个样子的
要找发票接口相关的日志,就到 Invoice 文件夹中找对应日期的文件。若要查找其他日志内容,就在 Web 文件夹中查找。(Invoice 和 Web 是在 log4j2.xml 配置文件的 fileName 节点进行配置的。)