XML 中的<gelf ...>
appender 标记创建 biz.paluch.logging.gelf.log4j.GelfLogAppender
GelfLogAppender 类使用 GelfSenderFactory 来创建要使用的 GeldSender。GelfSenderFactory 能够通过 Java 服务提供者接口加载 GelfSenderProvider(s):
ServiceLoader<GelfSenderProvider> gelfSenderProvider
= ServiceLoader.load(GelfSenderProvider.class);
要添加自定义 GelfSender,您需要创建一个扩展 GelfSenderProvider 接口的类:
package com.example.logging;
public class CustomGelfSenderProvider implements GelfSenderProvider {
@Override
public boolean supports(String host) {
// return true if this GelfSender is able to support sending to the given host
return true;
}
@Override
public GelfSender create(GelfSenderConfiguration configuration) throws IOException {
String host = configuration.getHost();
return new CustomGelfSender(host);
}
}
CustomGelfSender 是您对 GelfSender 接口的实现:
package com.example.logging;
public class CustomGelfSender implements GelfSender {
private final String host;
public CustomGelfSender(String host) {
this.host = host;
}
@Override
public boolean sendMessage(GelfMessage message) {
// Send gelf message
return true;
}
@Override
public void close() {
// Anything to clean up on close
}
}
然后通过将文件添加到src/main/resources/META-INF/services
.
文件名应该是服务实现的接口的全限定类名,所以在本例中为biz.paluch.logging.gelf.intern.GelfSenderProvider
.
该文件的内容是 GelfSenderProvider 实现的完全限定类名,因此在本例中为com.example.logging.CustomGelfSenderProvider
.