如何使用vertx-default-jul-logging.properties文件来控制文件的格式和数量?

时间:2017-02-16 19:19:21

标签: java vert.x

我正在努力使用我被告知要使用的Vertx软件包。 所有日志记录都将使用Vertx(io.vertx.core.logging.Logger)

完成

我今天可以使用vertx-default-jul-logging.properties文件登出文件。 我坚持的是这三件事。 (是的,我一直在线阅读大量文档。我只需要看到一个可靠的工作属性文件,其中写出的东西) 1.如何指定多个输出文件,以便一些转到mmddyy class.method.log 以及mmddyy audit.log的第二个文件

  1. 如何控制内容的输出,使日志的格式为{“yy-MM-dd”} [%-5level]%class {15}。%M:%L - %msg %N

  2. 您可以指向我的任何可靠资源都有一些关于在此vertx-default-jul-logging.properties文件中编写正确内容的教程,因为我已经花了一天时间在这上面并且不认为这需要很长时间才能得到。

  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

您应该首先阅读官方文档中的小章节http://vertx.io/docs/vertx-core/java/#_logging。重要的是要看到它解释了即使JUL是默认的,如果您愿意,也可以使用任何其他日志框架:

  • 的log4j
  • SLF4J
  • log4j2

vert.x logger类为您提供的只是一个抽象,无论下面的内容是什么都隐藏在您的代码中,如果您想要更改它,您就不需要更改代码。

如果您仍想使用JUL,可以在配置上配置日志格式:

# here you specify who's going to handle the logs
# for this example I'll use only the console
handlers=java.util.logging.ConsoleHandler
# now you specify the format
java.util.logging.SimpleFormatter.format=%5$s %6$s\n
# and now you tell the console to use that format
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

这些是配置的基础,为了控制语法在此处指定的格式http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

答案 1 :(得分:3)

首先,如果你还想使用JUL丢弃这个答案;否则,继续阅读。

我正在使用Vert.x 3.3.3并将所有日志重定向到/到Log4J 2.x - 类似的方法适用于Logback / SLF4J。

首先需要添加/包含这些依赖项(我正在使用Gradle;如果可用,请更新版本):

compile 'com.lmax:disruptor:3.3.5'
compile 'org.apache.logging.log4j:log4j-1.2-api:2.7'
compile 'org.apache.logging.log4j:log4j-jcl:2.7'
compile 'org.apache.logging.log4j:log4j-jul:2.7'
compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.7'

然后创建一个名为${projectRoot}/src/main/resources/log4j2.xml的文件,并在其中添加以下“内容”:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Properties>
    <Property name="log-pattern">%d{MM-dd-yyyy HH:mm:ss.SSS} |- %highlight{%5p}{TRACE=blue, DEBUG=green, INFO=green, WARN=yellow, ERROR=red, FATAL=red} in %style{%C{1}:%L}{cyan} [%style{%t}{magenta}] - %m%n</Property>
  </Properties>

  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="${log-pattern}" />
    </Console>
  </Appenders>

  <!-- Logger levels: trace, debug, info, warn, error, fatal -->
  <Loggers>
    <AsyncLogger name="your.package.name" level="DEBUG" additivity="false" includeLocation="true">
      <AppenderRef ref="Console" />
    </AsyncLogger>

    <Root level="WARN">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

...最后,在您的班级中定义LOGGER,以便实际“执行日志记录”。

...
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public final class Application extends AbstractVerticle {
  final Logger LOGGER = LogManager.getLogger();

  ...
}

这将成功 - 但使用Log4J 2.x.请记住,Vert.x本质上是异步的(或者是排序的),并且此配置也使用异步记录器,因此需要(非常棒的IMO)LMAX Disruptor

另请注意,您需要更改应用程序的软件包名称(请参阅AsyncLogger定义;我使用your.package.name),最后更改log-pattern格式正在寻找。