在我的DW应用程序中,我正在尝试将日志记录到文件和控制台异步。我发现我可以使用AsyncAppender,但是已经在DropWizard中配置了,或者我是否需要启用它,如果是这样,我如何配置记录器以使用AsyncAppender
Logger root = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
AsyncAppender fileAppender = (AsyncAppender) root.getAppender("async-file-appender");
我的config.yaml看起来像这样
server:
minThreads: 512
type: default
supportedCarParcFile: /opt/foo/my_app/config/my-app.json
logging:
appenders:
-
threshold: INFO
type: console
-
archivedFileCount: 7
archivedLogFilenamePattern: /opt/foo/my_app/logs/my-app-%d.log.gz
currentLogFilename: /opt/foo/my_app/logs/my-app.log
threshold: INFO
timeZone: CST
type: file
-
archivedFileCount: 7
archivedLogFilenamePattern: /opt/foo/my_app/logs/my-app_error-%d.log.gz
currentLogFilename: /opt/foo/my_app/logs/my-app_error.log
threshold: ERROR
timeZone: CST
type: file
loggers:
metrics:
additive: true
appenders:
-
archivedFileCount: 10
archivedLogFilenamePattern: /opt/foo/my_app/logs/metrics-%d.log.gz
currentLogFilename: /opt/foo/my_app/logs/metrics.log
type: file
level: INFO
我正在使用 DropWizard 1.0.5 。
答案 0 :(得分:2)
默认情况下,dropwizard中的DefaultLoggingFactory
用于记录目的。
you can see here使用AsyncLoggingEventAppenderFactory
使用AsyncAppenderBase
构建appender。 ch.qos.logback.core.AsyncAppenderBase
的文档指出:
此appender和派生类,异步记录事件。为了 为避免丢失日志记录事件,应关闭此appender。它是 用户有责任关闭appender,通常是在结束时 应用程序生命周期。
此appender缓冲a中的事件 BlockingQueue的。这个appender创建的工作线程需要事件 从队列的头部,并将它们发送到单个appender 附在这个附加器上。
现在问题是,但是已经在DropWizard中配置了,还是我需要启用它?
我想说,您不需要明确启用它来配置日志的异步附加。 AsyncLoggingEventAppenderFactory
将照顾它。