【问题标题】:Dropwizard logging: add new appender for a particular loggerDropwizard 日志记录:为特定记录器添加新的附加程序
【发布时间】:2015-09-12 15:47:41
【问题描述】:

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

我已经在包中注册了一个新的记录器,如下所示:

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

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

我要解决的问题是:我希望 mylogger(only) 写入的所有日志都转到一个新文件。在服务 yml 文件中添加一个新的 appender 是相当简单的,例如:

logging:

  loggers:

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

但这意味着所有应用程序日志现在都将写入 example.log。我不知道有一种方法可以专门为此 appender 指定一个不会影响/更改现有日志记录的记录器。

有人可以告诉我在 dropwizard 中是否有办法做到这一点?谢谢!

【问题讨论】:

标签: java logging logback dropwizard


【解决方案1】:

在 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 将阻止记录器(或它下面的任何东西)写入层次高于它的附加器,包括根记录器。

参考资料 -

【讨论】:

    【解决方案2】:

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

    要求:

    自定义 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的任何配置,因为这个类的功能是创建Dropwizard将使用的appender。

    自定义附加程序

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

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

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

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

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

    使用自定义附加程序

    在您的 yml 文件中,按您指定的名称添加新的附加程序:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 1970-01-01
        相关资源
        最近更新 更多