nig*_*ler 11 java logging logback dropwizard
我是dropwizard的新手,我正试图找出更好地配置日志记录的方法.
我在一个捆绑包中注册了一个新的记录器,如下所示:
Logger log = LoggerFactory.getLogger("mylogger");
log.info("this is a log from mylogger");
Run Code Online (Sandbox Code Playgroud)
现在我在一堆服务中使用这个包.默认情况下,通过此记录器的任何日志都将写入应用程序日志文件.
我试图解决的问题是:我希望mylogger(仅)编写的所有日志都转到新文件.将新的appender添加到服务yml文件是相当明星的,如:
logging:
loggers:
appenders:
- type: file.
currentLogFilename: ./logs/example.log
archivedLogFilenamePattern: ./logs/example-%d.log.gz
archivedFileCount: 5
Run Code Online (Sandbox Code Playgroud)
但这意味着现在所有的应用程序日志都会写入example.log.我不知道如何为这个appender专门指定一个不影响/改变现有日志记录的记录器.
有人能告诉我是否有办法在dropwizard中执行此操作?谢谢!
Den*_*yan 12
在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
Run Code Online (Sandbox Code Playgroud)
将additive添加到false将阻止logger(或其下的任何内容)写入层次结构上方的appender,包括root logger.
参考文献 -
小智 12
如果您希望自定义记录器成为日志文件中的唯一日志,并且进入默认的appender,则可以根据Dropwizard日志记录规范创建自己的appender.
扩展io.dropwizard.logging.AbstractAppenderFactory (称为MyCustomFactory)
通过在此创建JsonProperties,使用Hibernate Annotations对配置文件中所需的任何验证,可以从.yml文件中注入自定义配置:
@NotNull
@JsonProperty
private String url;
@JsonProperty
private int maxBufferSize = 100;
@JsonProperty
private int sendDelayInSeconds = 10;
Run Code Online (Sandbox Code Playgroud)
给班级一个@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
Run Code Online (Sandbox Code Playgroud)