我的其余代码都有一个logback配置,现在使用的是SNMP4J-Agent。当我启动该代理程序时,我必须给一个logFactory,它似乎只接受Log4J。我想与我的其他应用程序一起登录。
LogFactory.setLogFactory(new Log4jLogFactory());
org.apache.log4j.BasicConfigurator.configure();
LogFactory.getLogFactory().getRootLogger().setLogLevel(LogLevel.DEBUG);
我发现我可以将自定义附加程序传递给log4j配置,因此尝试创建一个附加程序,但出现错误。请帮忙。
private static org.apache.log4j.Appender snmpAppender =
(org.apache.log4j.Appender) Logger.getRootLogger().getAppender("SNMP");
static {
LogFactory.setLogFactory(new Log4jLogFactory());
org.apache.log4j.BasicConfigurator.configure(snmpAppender);
LogFactory.getLogFactory().getRootLogger().setLogLevel(LogLevel.DEBUG);
}
我的Appender类的代码段:
public class SnmpAppender extends AppenderBase<ILoggingEvent> {
private final ConcurrentMap<String, ILoggingEvent> eventMap
= new ConcurrentHashMap<>();
private String prefix;
@Override
protected void append(final ILoggingEvent event) {
if (prefix == null || "".equals(prefix)) {
addError("Prefix is not set for MapAppender.");
return;
}
eventMap.put(prefix + System.currentTimeMillis(), event);
}
我的logback配置片段:
<appender name="SNMP-Agent"
class="ca.bat.snmp.SnmpAppender">
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator
class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>SNMP</marker>
</evaluator>
<onMismatch>DENY</onMismatch>
<onMatch>NEUTRAL</onMatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
<immediateFlush>true</immediateFlush>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/snmp/snmp.%d{yyyy-MM-
dd}.log.zip</fileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
</appender>
这是我得到的:
log4j:WARN No appenders could be found for logger (org.snmp4j.security.Salt).
log4j:WARN Please initialize the log4j system properly.
我的 Gradle :
dependencies {
[...]
compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
compile group: 'org.snmp4j', name: 'snmp4j-agent', version: '2.6.3'
}
最佳答案
您认为SNMP4J(-Agent)仅支持Log4J是不正确的。与其创建自己的Log4J-Appender,不如扩展SNMP4J LogFactory接口(interface)并实现自己的日志桥作为“MyLogBackLogFactory”进行登录,会更容易。
然后打电话
LogFactory.setLogFactory(new MyLogBackLogFactory());
在调用任何其他SNMP4J(-Agent)代码之前。