Dropwizard日志记录:为特定记录器添加新的appender

时间:2015-06-25 20:46:52

标签: java logging logback dropwizard

我是dropwizard的新手,我正试图找出更好地配置日志记录的方法。

我已经在一个捆绑包中注册了一个新的记录器:

Logger log = LoggerFactory.getLogger("mylogger");
log.info("this is a log from mylogger");

现在我在一堆服务中使用这个捆绑包。默认情况下,通过此记录器的任何日志都将写入应用程序日志文件。

我试图解决的问题是:我希望mylogger(仅)编写的所有日志都转到新文件。将新的appender添加到服务yml文件中是相当明星的,例如:

logging:

  loggers:

  appenders:
  - type: file.
    currentLogFilename: ./logs/example.log
    archivedLogFilenamePattern: ./logs/example-%d.log.gz
    archivedFileCount: 5

但这意味着现在所有的应用程序日志都会写入example.log。我不知道如何为这个appender专门指定一个不影响/改变现有日志记录的记录器。

有人可以告诉我,是否有办法在dropwizard中执行此操作?谢谢!

3 个答案:

答案 0 :(得分:11)

在Dropwizard 0.9.0(2015年10月28日发布)中,他们增加了对单个记录器追加器的支持并禁用了记录器的可加性。

要实现您所描述的内容,您可以在yaml配置文件中指定以下内容 -

logging:
  level: INFO
  loggers:
    "mylogger":
      level: DEBUG
      additive: false
      appenders:
        - type: file
          currentLogFilename: /var/log/mylogger.log
          archivedLogFilenamePattern: /var/log/mylogger-%d.log.gz
          archivedFileCount: 5
  appenders:
    - type: console

将additive添加到false将阻止logger(或其下的任何内容)写入层次结构上方的appender,包括root logger。

参考文献 -

答案 1 :(得分:11)

如果您希望自定义记录器成为日志文件中的唯一日志,并且进入默认的appender,则可以根据Dropwizard日志规范创建自己的appender。

要求:

自定义Appender工厂

扩展io.dropwizard.logging.AbstractAppenderFactory (简称MyCustomFactory)

可以在此处通过创建JsonProperties从您的.yml文件中注入自定义配置,使用Hibernate Annotations进行配置文件所需的任何验证:

@NotNull
@JsonProperty
private String url;
@JsonProperty
private int maxBufferSize = 100;
@JsonProperty
private int sendDelayInSeconds = 10;

为班级@JsonTypeName("YourAppenderName")。这是您在配置中引用appender的方法。

此类需要访问您要传递给appender的任何配置,因为此类的功能是创建Dropwizard将使用的appender。

Custom Appender

扩展了ch.qos.logback.core.AppenderBase (简称为MyCustomAppender)。您可以自己编写,也可以使用Loggly等服务中的现有文件。

在appender中,检查日志的来源并过滤您要写入文件的内容。

告诉Dropwizard你的新定制工厂......

您需要将一个名为io.dropwizard.logging.AppenderFactory的文件放入src/main/resources/META-INF/services/目录。

此文件的内容是自定义Factory的全名(包括包)。 (例如:com.myCompany.appender.MyCustomFactory)

使用自定义appender

在yml文件中,按照您指定的名称添加新的appender:

appenders:
# Log warnings and errors to stderr
- type: console
  threshold: INFO
  target: stderr
# Custom Logger
- type: YourAppenderName
  threshold: INFO
  url: https://sendYourLogsHere/logs

答案 2 :(得分:0)

您可以参考dropwizard-logging库中的代码获取示例。 检查FileAppenderFactory。这是一个很好的参考点。