我是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中执行此操作?谢谢!
答案 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。
扩展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。
扩展了ch.qos.logback.core.AppenderBase
(简称为MyCustomAppender)。您可以自己编写,也可以使用Loggly等服务中的现有文件。
在appender中,检查日志的来源并过滤您要写入文件的内容。
您需要将一个名为io.dropwizard.logging.AppenderFactory
的文件放入src/main/resources/META-INF/services/
目录。
此文件的内容是自定义Factory的全名(包括包)。 (例如:com.myCompany.appender.MyCustomFactory)
在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
。这是一个很好的参考点。