Vertx 集成 SLF4J + Log4j2
Posted Johnny屋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vertx 集成 SLF4J + Log4j2相关的知识,希望对你有一定的参考价值。
Vertx 集成 SLF4J + Log4j2
本篇主要讲解 Vertx 中 如何集成日志 ,我选择的日志是 SLF4J + Log4j2 ,我也是比较推荐这种
因为在默认情况下,vert.x 会使用 Java 默认的日志 JUL
即 Java Util Log
,并读取 resource
下的 vertx-default-jul-logging.properties
文件并且不需要加任何依赖 很显然这种方式其实并不好
。
如果我们想用 Log4j2
+ SLF4J
的组合,直接选择 log4j-slf4j-impl
或者 log4j-slf4j18-impl
即可。这里当然选用 log4j-slf4j18-impl
使用最新版本 2.13.0
。它包含如下依赖:
org.slf4j:slf4j-api:1.8.0-alpha2
org.apache.logging.log4j:log4j-api:2.13.0
org.apache.logging.log4j:log4j-core:2.13.0
这三个依赖已经包含了我们所有需要引入的东西。
引入依赖
// https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j18-impl
//注意 一定要 compile 不能是 testCompile 否则启动 绑定不上
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j18-impl', version: '2.11.1'
日志框架加载顺序
从 vert.x 4 的官网文档中可以明确知道,他加载的顺序如下:
系统环境是否设置了
vertx.logger-delegate-factory-class-name
,如果有,就是用设置的值。JUL
的配置文件vertx-default-jul-logging.properties
是否在classpath
下如果上面都没有,就在 classPath 下按照顺序查找以下包是否存在
SLF4J
Log4J
Log4J2
如果以上都没有,使用 vert.x
默认的 JUL
配置。
所以 vert.x
4 中,是不需要我们去手动设置 vertx.logger-delegate-factory-class-name
参数了,他会默认去加载 classpath
下的日志库的。因此我们需要添加相关的依赖。
Log4j2.xml 文件配置
log4j2.xml 放在 resources 下面 下面是我使用的 Log4j2.xml 文件 网上也有其他的 可以自己配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info" packages="org.ysten.gdog.log4j2">
<Properties>
<!--日志文件保存路径-->
<Property name="LOG_PATH">/Users/johnny/Downloads/logs/</Property>
<!--应用名称-->
<Property name="APP_NAME">vertx-demo</Property>
<!--日志文件最大容量, 超过最大容量后日志文件分割-->
<Property name="MAX_FILE_SIZE">50MB</Property>
<!--分割日志的最大次数-->
<Property name="I_MAX">40</Property>
<!--日志输出模版-->
<Property name="PATTERN_LAYOUT">%d [%X{traceId}] [%t] %level (%F %M %L) - %msg%n</Property>
<Property name="CONSOLE_LAYOUT"
value="%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{Blue,Bright} %highlight{${LOG_LEVEL_PATTERN:-%5p}}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green, DEBUG=grey, TRACE=blue} %style{%pid}{magenta} --- %style{[%4.15t] %-10.40c{1.}}{cyan,Bright} : %m%n%ex"/>
</Properties>
<appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="${CONSOLE_LAYOUT}" />
</Console>
<RollingFile name="ERROR-FILE"
fileName="${LOG_PATH}/${APP_NAME}_error.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/${APP_NAME}_error_%d{yyyy-MM-dd}_%i.log">
<Filters>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<PatternLayout pattern="${PATTERN_LAYOUT}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
</Policies>
<DefaultRolloverStrategy max="${I_MAX}"/>
</RollingFile>
<RollingFile name="INFO-FILE"
fileName="${LOG_PATH}/${APP_NAME}_info.log"
filePattern="${LOG_PATH}/$${date:yyyy-MM}/${APP_NAME}_info_%d{yyyy-MM-dd}_%i.log">
<PatternLayout pattern="${PATTERN_LAYOUT}"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="${MAX_FILE_SIZE}"/>
</Policies>
<DefaultRolloverStrategy max="${I_MAX}"/>
</RollingFile>
</appenders>
<loggers>
<Root level="INFO" includeLocation="true">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ERROR-FILE" />
<appender-ref ref="INFO-FILE" />
</Root>
</loggers>
</configuration>
测试代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static Logger log4jLogger2 = LoggerFactory.getLogger(VertxDemo.class);
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
log4jLogger2.info("Hello SLF4J2");
vertx.createHttpServer()
.requestHandler(requestHandler -> {
//获取到 Response 直接返回消息
requestHandler.response().end("Hello Vertx !!!");
})
//监听在 8899 端口
.listen(8899);
}
总结
本篇主要讲解 Vertx 中 如何集成日志,选择的是 Log4j2 + SLF4J 方法很简单 ,主要来记录一下。
以上是关于Vertx 集成 SLF4J + Log4j2的主要内容,如果未能解决你的问题,请参考以下文章
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案