java-log4j2中MarkerFilter的使用0.9.1

0.9.1-2024年8月21日10:22:21

使用场景

就是在写日志的时候,给这个日志打上标记。通过配置将打好标记的日志提取出来。

使用MarkerFilter的注意事项

  1. Marker标记必须是唯一的,要确保应用程序中这个标记是唯一的,包括依赖。
  2. 可以动态添加或删除父标记。建议在第一次获得标记时识别父级。因为,set方法在一次操作中替换所有标记,而添加和删除一次只对一个标记进行操作,所以,动态添加或者删除操作对计算机消耗较大。
  3. 评估有多个父标记比没有父标记的操作要耗费性能得多。大概评估一个标记是否与其祖父母相匹配的时间要比评估标记本身的时间长3倍,但与解析调用者类名或行号相比,评估标记的成本要低得多。

使用步骤

  1. 定义log4j2.xml配置文件,在Filters标签中定义MarkerFilter,这里定义了一个EXCEPTION的marker。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" strict="true" name="XMLConfigTest"
               packages="org.apache.logging.log4j.test">
    <Properties>
        <Property name="filename">D:\CDesktop\dm\pac\mo2.txt</Property>
    </Properties>

    <Appenders>
        <Appender type="Console" name="STDOUT">
            <Layout type="PatternLayout" pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Appender>

        <Appender type="File" name="File" fileName="${filename}">
            <Layout type="PatternLayout">
                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </Layout>
        </Appender>
        
        <Appender type="File" name="errFile" fileName="D:\CDesktop\dm\pac\mo2-erro.txt">
            <Layout type="PatternLayout">
                <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
            </Layout>
            <Filters>
            	<!--这里定义MarkerFilter-->
                <Filter type="MarkerFilter" marker="EXCEPTION"/>
            </Filters>
        </Appender>
        
    </Appenders>

    <Loggers>
        <Logger name="org.apache.logging.log4j.test1" level="trace" additivity="false">
            <AppenderRef ref="STDOUT"/>
        </Logger>

        <Logger name="org.apache.logging.log4j.test2" level="trace" additivity="false">
            <AppenderRef ref="File"/>
        </Logger>

        <Logger name="org.apache.logging.log4j.test2" level="trace" additivity="false">
            <AppenderRef ref="errFile"/>
        </Logger>

        <Root level="trace">
            <AppenderRef ref="File"/>
            <AppenderRef ref="STDOUT"/>
            <AppenderRef ref="errFile"/>
        </Root>
    </Loggers>

</Configuration>
  1. 代码中调用
package like;

import like.mike.book1;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;

import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;


public class god {
    private static Logger logger = LogManager.getLogger(god.class);

    private static final Marker SQL_MARKER = MarkerManager.getMarker("SQL");
    private static final Marker UPDATE_MARKER = MarkerManager.getMarker("EXCEPTION");

    public static void main(String[] args) throws InterruptedException {

        Document document= DocumentHelper.createDocument();
        logger.info(document.toString());

        new book().sayBook();
        new book1().sethh();

        for (int i=0;i<10;i++){
            logger.info("mmmm22:"+i);
            logger.debug("mmmm22:"+i);
            logger.warn("mmmm22:"+i);
            logger.error(UPDATE_MARKER,"mmmm22EXCEPTION:"+i);
            logger.fatal("mmmm22:"+i);
            logger.trace("mmmm22:"+i);
            logger.fatal("2222222222");
            Thread.sleep(1000);
        }
    }
}

  1. 查看执行结果

可以看到在mo2-erro.txt中将标记为UPDATE_MARKER的信息提取出来了。

console的部分输出,正常打印

2024-08-21 09:29:42.504 [main] INFO  like.god - org.dom4j.tree.DefaultDocument@146044d7 [Document: name null]
this is class book
this is book1
2024-08-21 09:29:42.507 [main] INFO  like.god - mmmm22:0
2024-08-21 09:29:42.507 [main] DEBUG like.god - mmmm22:0
2024-08-21 09:29:42.507 [main] WARN  like.god - mmmm22:0
2024-08-21 09:29:42.508 [main] ERROR like.god - mmmm22EXCEPTION:0
2024-08-21 09:29:42.508 [main] FATAL like.god - mmmm22:0
2024-08-21 09:29:42.508 [main] TRACE like.god - mmmm22:0
2024-08-21 09:29:42.508 [main] FATAL like.god - 2222222222
2024-08-21 09:29:43.515 [main] INFO  like.god - mmmm22:1
2024-08-21 09:29:43.515 [main] DEBUG like.god - mmmm22:1
2024-08-21 09:29:43.515 [main] WARN  like.god - mmmm22:1
2024-08-21 09:29:43.515 [main] ERROR like.god - mmmm22EXCEPTION:1

D:\CDesktop\dm\pac\mo2-erro.txt文件的内容
2024-08-21 09:29:42,508 ERROR l.god [main] mmmm22EXCEPTION:0
2024-08-21 09:29:43,515 ERROR l.god [main] mmmm22EXCEPTION:1
2024-08-21 09:29:44,527 ERROR l.god [main] mmmm22EXCEPTION:2

参考

https://logging.apache.org/log4j/2.x/manual/api.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值