我的其余代码都有一个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)代码之前。

08-05 12:14