log4j2 HTTP请求日志异步

来源:互联网 发布:国外vps推荐 知乎 编辑:程序博客网 时间:2024/05/16 03:00

1、首先maven项目加入依赖包

<dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-core</artifactId>    <version>2.9.0</version></dependency><dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-api</artifactId>    <version>2.9.0</version></dependency><dependency>    <groupId>com.lmax</groupId>    <artifactId>disruptor</artifactId>    <version>3.3.4</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.9.0</version></dependency>

2、进行log4j2.xml文件配置。

将配置文件log4j2.xml配置到classpath下面。以下是简单的xml配置。其中apperders元素配置了Http 其实调用的就是log4j2 core包下org.apache.logging.log4j.core.appender.HttpAppender这个处理类

<?xml version="1.0" encoding="UTF-8"?><configuration>    <appenders>        <Http name="Http" url="http://localhost:29010/compass/log">            <JsonLayout properties="true"/>        </Http>    </appenders>    <loggers>        <!--logger 继承root  此配置是输出com.spring.mvc 下面的error及以上的日志到 RollingFile 项-->        <!--additivity = true 则root日志也输出。false则不执行root日志-->        <Logger name="com.spring.mvc" level="error" additivity="true">            <AppenderRef ref="Http"/>        </Logger>    </loggers></configuration>

通过以上配置则实现了http日志请求。

3、properties配置文件实现异步

同样在classpath下面加入log4j2.component.properties配置文件添加以下配置

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

也可以在代码中将其加上系统配置如:

        System.setProperty("Log4jContextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

以下是业务调用日志输出

private static Logger log=LogManager.getLogger(LogController.class);@RequestMapping("/log")String log() {    log.info("info test");    log.warn("warn test");    log.error("error test");    return "ok";}

如果没有这个系统配置。业务当中调用的这个Logger对象将是
org.apache.logging.log4j.core.Logger
加上了这个系统配置则Logger对象是
org.apache.logging.log4j.core.async.AsyncLogger

4、日志信息

以下是日志服务器也就是log4j2.xm所配置的http://localhost:29010/compass/log这台日志服务所接收到的json日志

{  "timeMillis" : 1507620120885,  "thread" : "http-nio-8081-exec-2",  "level" : "ERROR",  "loggerName" : "com.spring.mvc.web.controller.LogController",  "message" : "error test",  "endOfBatch" : true,  "parameterCount" : 0,  "formattedMessage" : "error test",  "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",  "threadPriority" : 5,  "threadId" : 50,  "contextMap" : { }}
原创粉丝点击