无法识别 Dropwizard 自定义 AppenderFactory
Dropwizard custom AppenderFactory not recognized
我正在尝试为 Splunk HTTP 事件收集器实施自定义 AppenderFactory。我写了一个简单的class如下,
package com.example.app;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.AppenderBase;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.logging.AbstractAppenderFactory;
import io.dropwizard.logging.async.AsyncAppenderFactory;
import io.dropwizard.logging.filter.LevelFilterFactory;
import io.dropwizard.logging.layout.LayoutFactory;
@JsonTypeName("splunk")
public class SplunkAppenderFactory extends AbstractAppenderFactory{
@Override
public Appender build(LoggerContext context, String applicationName, LayoutFactory layoutFactory, LevelFilterFactory levelFilterFactory, AsyncAppenderFactory asyncAppenderFactory) {
System.out.println("Setting up SplunkAppenderFactory!");
final SplunkAppender appender = new SplunkAppender();
appender.setName("splunk-appender");
appender.setContext(context);
appender.start();
return wrapAsync(appender, asyncAppenderFactory);
}
}
class SplunkAppender extends AppenderBase<ILoggingEvent> {
@Override
protected void append(ILoggingEvent eventObject) {
System.out.println("Splunk: "+ eventObject.toString());
}
}
据说我们不需要连接任何东西,因为 Dropwizard 会自动扫描并连接这些东西。但是当我 运行 应用程序时,我得到了这个错误,
./infrastructure/config/config.yml has an error:
* Failed to parse configuration at: logging.appenders.[2]; Could not resolve type id 'splunk' into a subtype of [simple type, class io.dropwizard.logging.AppenderFactory]: known type ids = [AppenderFactory, console, file, syslog]
at [Source: N/A; line: -1, column: -1] (through reference chain: com.example.app.AppConfiguration["logging"]->io.dropwizard.logging.DefaultLoggingFactory["appenders"]->java.util.ArrayList[2])
我的app.config如下,
logging:
appenders:
# log format: <Level> - <Time> - <Revision> - <Environment> - <Thread> - <Log Content>
- type: console
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
threshold: ${CONSOLE_LOG_LEVEL:-ERROR}
- type: file
threshold: INFO
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
# The file to which current statements will be logged.
currentLogFilename: ./logs/app.log
# When the log file rotates, the archived log will be renamed to this and gzipped. The
# %d is replaced with the previous day (yyyy-MM-dd). Custom rolling windows can be created
# by passing a SimpleDateFormat-compatible format as an argument: "%d{yyyy-MM-dd-hh}".
archivedLogFilenamePattern: ./logs/app-%d.log.gz
# The number of archived files to keep.
archivedFileCount: 10
# The timezone used to format dates. HINT: USE THE DEFAULT, UTC.
timeZone: UTC
- type: splunk
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
threshold: INFO
我怎样才能得到这份工作?
您可能必须创建一个名为的文件:
META-INF/services/io.dropwizard.logging.AppenderFactory
在项目的资源文件夹中,此文件的内容是 Appender class(或 classes)的完整限定名称可用:
com.example.app.SplunkAppenderFactory
核心 DW 项目还包括带有默认附加程序的此文件:
我正在尝试为 Splunk HTTP 事件收集器实施自定义 AppenderFactory。我写了一个简单的class如下,
package com.example.app;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.AppenderBase;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.logging.AbstractAppenderFactory;
import io.dropwizard.logging.async.AsyncAppenderFactory;
import io.dropwizard.logging.filter.LevelFilterFactory;
import io.dropwizard.logging.layout.LayoutFactory;
@JsonTypeName("splunk")
public class SplunkAppenderFactory extends AbstractAppenderFactory{
@Override
public Appender build(LoggerContext context, String applicationName, LayoutFactory layoutFactory, LevelFilterFactory levelFilterFactory, AsyncAppenderFactory asyncAppenderFactory) {
System.out.println("Setting up SplunkAppenderFactory!");
final SplunkAppender appender = new SplunkAppender();
appender.setName("splunk-appender");
appender.setContext(context);
appender.start();
return wrapAsync(appender, asyncAppenderFactory);
}
}
class SplunkAppender extends AppenderBase<ILoggingEvent> {
@Override
protected void append(ILoggingEvent eventObject) {
System.out.println("Splunk: "+ eventObject.toString());
}
}
据说我们不需要连接任何东西,因为 Dropwizard 会自动扫描并连接这些东西。但是当我 运行 应用程序时,我得到了这个错误,
./infrastructure/config/config.yml has an error: * Failed to parse configuration at: logging.appenders.[2]; Could not resolve type id 'splunk' into a subtype of [simple type, class io.dropwizard.logging.AppenderFactory]: known type ids = [AppenderFactory, console, file, syslog] at [Source: N/A; line: -1, column: -1] (through reference chain: com.example.app.AppConfiguration["logging"]->io.dropwizard.logging.DefaultLoggingFactory["appenders"]->java.util.ArrayList[2])
我的app.config如下,
logging:
appenders:
# log format: <Level> - <Time> - <Revision> - <Environment> - <Thread> - <Log Content>
- type: console
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
threshold: ${CONSOLE_LOG_LEVEL:-ERROR}
- type: file
threshold: INFO
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
# The file to which current statements will be logged.
currentLogFilename: ./logs/app.log
# When the log file rotates, the archived log will be renamed to this and gzipped. The
# %d is replaced with the previous day (yyyy-MM-dd). Custom rolling windows can be created
# by passing a SimpleDateFormat-compatible format as an argument: "%d{yyyy-MM-dd-hh}".
archivedLogFilenamePattern: ./logs/app-%d.log.gz
# The number of archived files to keep.
archivedFileCount: 10
# The timezone used to format dates. HINT: USE THE DEFAULT, UTC.
timeZone: UTC
- type: splunk
logFormat: "%level %d{HH:mm:ss.SSS} %mdc{revision} %mdc{environment} '%mdc{user}' %t %logger{5} - %X{code} %msg %n"
threshold: INFO
我怎样才能得到这份工作?
您可能必须创建一个名为的文件:
META-INF/services/io.dropwizard.logging.AppenderFactory
在项目的资源文件夹中,此文件的内容是 Appender class(或 classes)的完整限定名称可用:
com.example.app.SplunkAppenderFactory
核心 DW 项目还包括带有默认附加程序的此文件: