Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Dropwizard日志:为特定记录器添加新的附加程序_Java_Logging_Logback_Dropwizard - Fatal编程技术网

Java Dropwizard日志:为特定记录器添加新的附加程序

Java Dropwizard日志:为特定记录器添加新的附加程序,java,logging,logback,dropwizard,Java,Logging,Logback,Dropwizard,我是dropwizard的新手,正在尝试找出更好地配置日志记录的方法 我已在一个包中注册了一个新的记录器,如下所示: Logger log = LoggerFactory.getLogger("mylogger"); log.info("this is a log from mylogger"); 现在我在一系列服务中使用这个捆绑包。默认情况下,通过此记录器的任何日志都将写入应用程序日志文件 我试图解决的问题是:我希望mylogger(仅)编写的所有日志都转到一个新文件。在服务yml文件中添加

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

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

Logger log = LoggerFactory.getLogger("mylogger");
log.info("this is a log from mylogger");
现在我在一系列服务中使用这个捆绑包。默认情况下,通过此记录器的任何日志都将写入应用程序日志文件

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

logging:

  loggers:

  appenders:
  - type: file.
    currentLogFilename: ./logs/example.log
    archivedLogFilenamePattern: ./logs/example-%d.log.gz
    archivedFileCount: 5
但这意味着所有应用程序日志现在都将写入example.log。我不知道有什么方法可以专门为此appender指定一个记录器,它不会影响/改变现有的日志记录

有人能告诉我在dropwizard中是否有这样做的方法吗?谢谢

在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
将Addition设置为false将防止记录器(或其下的任何内容)写入其上层次结构的附加器,包括根记录器

参考资料-


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

要求: 定制追加器工厂 它扩展了io.dropwizard.logging.AbstractAppenderFactory(称为MyCustomFactory)

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

@NotNull
@JsonProperty
private String url;
@JsonProperty
private int maxBufferSize = 100;
@JsonProperty
private int sendDelayInSeconds = 10;
给类一个
@JsonTypeName(“YourAppenderName”)
。这是您在配置中引用appender的方式

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

自定义附加器 扩展了
ch.qos.logback.core.AppenderBase
(称为MyCustomAppender)。您可以自己编写,也可以使用Loggly等现有服务

在appender中,检查日志来自何处,并筛选要写入文件的内容

要向Dropwizard介绍新的自定义工厂。。。 您需要将名为
io.dropwizard.logging.AppenderFactory
的文件放入
src/main/resources/META-INF/services/
目录中

此文件的内容是自定义工厂的全名(包括软件包)。(示例: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

有关示例,请参阅dropwizard日志库中的代码。 检查一下。这是一个很好的参考点。

看起来这是刚刚添加的: