介绍
Vertx支持使用其内部自定义的日志方式, 也支持用户自定义日志方式
- 通过环境变量配置vertx.logger-delegate-factory-class-name
- 如果classpath下有vertx-default-jul-logging.properties文件, 默认是jdk日志
- 在classpath下有如下依赖则使用, 顺序如:
- SLF4J
- Log4J
- Log4J2
1. maven项目依赖
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.4</version>
</dependency>
2.log4j2.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%5p}{TRACE=blue, DEBUG=green, INFO=green,
WARN=yellow, ERROR=red, FATAL=red} %tid --- [%style{%15.15t}{magenta}] %-40.40logger{39}---[%4L] : %m%n"/>
<property name="FILE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %tid --- [%15.15t] %-40.40logger{39}---[%4L] : %m%n"/>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${CONSOLE_LOG_PATTERN}"/>
</Console>
<RollingRandomAccessFile name="FILE" fileName="logs/logging-log4j2.log" append="true"
filePattern="logs/logging-log4j2.log.%d{yyyyMMdd}">
<PatternLayout>
<Pattern>${FILE_LOG_PATTERN}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="24" modulate="true"/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<AsyncLogger name="com.lance.logging" level="debug" additivity="false" includeLocation="true">
<AppenderRef ref="Console"/>
<appender-ref ref="FILE"/>
</AsyncLogger>
<Root level="debug">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
3.日志打印如下
@Slf4j
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
vertx.createHttpServer().requestHandler(req -> {
IntStream.range(0, 100).forEach(i -> log.info("===>start print i: {}, time: {}", i, System.nanoTime()));
req.response().putHeader("content-type", "text/plain").end("Hello from Vert.x!");
}
).listen(8888, http -> {
if (http.succeeded()) {
startPromise.complete();
log.info("HTTP server started on port 8888");
} else {
startPromise.fail(http.cause());
}
});
}
}