VertX和Log4j无法获得配置

时间:2017-12-09 08:24:38

标签: java logging log4j vert.x

我正在使用VertX,我想使用Log4J作为我的代码和exthernal库的记录器。

所以我写下了这段代码:

import org.apache.log4j.Logger;

public class Main extends AbstractVerticle {

   final static Logger logger = Logger.getLogger("Gimli");

   @Override
   public void start(Future<Void> fut) throws Exception {
      System.setProperty("vertx.logger-delegate-factory-class-name", " io.vertx.core.logging.Log4j2LogDelegateFactory"); // Default logger

    logger.debug("Debug log");
    logger.error("Error log");
    logger.warn("Warning log");
  }
}

我将 src / main / resources 文件放入 log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
  <Appenders>
    <RollingFile name="app_file" append="true" fileName="/var/log/seachlog.log" filePattern="/var/log/vertx/$${date:yyyy-MM}/seachlog-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - %m%n" />
        <Policies>
            <OnStartupTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="5MB" />
            <TimeBasedTriggeringPolicy />
        </Policies>
    </RollingFile>
    <RollingFile name="vertx_file" append="true" fileName="/var/log/vertx.log" filePattern="/var/log/vertx/$${date:yyyy-MM}/vertx-%d{MM-dd-yyyy}-%i.log.gz">
        <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - %m%n" />
        <Policies>
            <OnStartupTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="5MB" />
            <TimeBasedTriggeringPolicy />
        </Policies>
    </RollingFile>
    <Console name="STDOUT" target="SYSTEM_OUT">
        <!-- <LogStashJSONLayout/> -->
        <PatternLayout pattern="%d{ISO8601} %-5p %c:%L - sfsdfsdfsdfsdf %m%n" />
    </Console>
</Appenders>

<Loggers>
    <Logger name="Gimli" level="DEBUG">
        <!-- <AppenderRef ref="vertx_rollingFile" /> -->
        <!-- <AppenderRef ref="vertx_socket" /> -->
        <AppenderRef ref="STDOUT"/>
        <AppenderRef ref="vertx_file" />
    </Logger>
    <Root level="DEBUG">
        <!-- <AppenderRef ref="vertx_socket" /> -->
        <AppenderRef ref="STDOUT"/>
        <AppenderRef ref="app_file" />
    </Root>
</Loggers>

但输出似乎没有变化:

2017-12-09 09:21:34,503 DEBUG [vert.x-eventloop-thread-0] [Gimli] Debug log (Main.java:31)
2017-12-09 09:21:34,505 ERROR [vert.x-eventloop-thread-0] [Gimli] Error log (Main.java:32)
2017-12-09 09:21:34,507 WARN  [vert.x-eventloop-thread-0] [Gimli] Warning log (Main.java:33)

如何正确设置配置文件?

2 个答案:

答案 0 :(得分:3)

首先,您看起来正在将log4jlog4j2配置文件合并。这可能是您的配置未加载的原因。

但我建议使用vert.x日志记录功能 - 你也可以使用log4j或log4j2。您将按以下方式定义记录器:

import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;

Logger logger = LoggerFactory.getLogger("Gimli");

然后像你一样正常使用它。所以:

logger.debug("Debug log");
logger.error("Error log");
logger.warn("Warning log");

接下来,您将在src/main/resources中保留配置。请小心,因为这是log4j2配置。所以它应该命名为log4j2.xml
现在您只需要为vertx指定logger委托工厂。对于log4j或log4j2:

io.vertx.core.logging.Log4jLogDelegateFactory 

io.vertx.core.logging.Log4j2LogDelegateFactory

您可以设置系统属性vertx.logger-delegate-factory-class-name,也可以将VM参数指定为:

-Dvertx.logger-delegate-factory-class-name=io.vertx.core.logging.Log4j2LogDelegateFactory

(对于log4j2)

documentation

中的更多信息

答案 1 :(得分:0)

最后我解决了,主要问题是在maven配置中。我在构建脚本中添加了以下行

 <build>
   <resources>
      <resource>
        <directory>/</directory>
        <includes>
          <include>config.json</include>
        </includes>
      </resource>
    </resources>
 </build>

这样maven会考虑/资源文件夹,而不是/src/main/resources所以log4j找不到log4j.properties文件