java - Using SNMP4J-Agent with a Logback configuration
问题描述
I have a logback configuration for the rest of my code and I am now using SNMP4J-Agent. When I start this agent I have to give a logFactory and it seems to accept only Log4J. I would like to log along with the rest of my app.
LogFactory.setLogFactory(new Log4jLogFactory());
org.apache.log4j.BasicConfigurator.configure();
LogFactory.getLogFactory().getRootLogger().setLogLevel(LogLevel.DEBUG);
I found that I could pass a custom appender to the log4j configuration so I tried to create one, but I got an error. Please help.
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);
}
Snippet of my appender class :
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);
}
Snippet of my logback config :
<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>
Here is what I get :
log4j:WARN No appenders could be found for logger (org.snmp4j.security.Salt).
log4j:WARN Please initialize the log4j system properly.
My 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 接口并将自己的日志桥接实现为“MyLogBackLogFactory”。然后打电话
LogFactory.setLogFactory(new MyLogBackLogFactory());
在调用任何其他 SNMP4J(-Agent) 代码之前。
推荐阅读
- json - 发布 JSON 布尔值 Django
- asp.net-core-mvc - MVC .Net Core - 将数据库内容导出为 .csv 文件
- javascript - 无法让 FineUploader 的初始文件列表功能正常工作
- uml - UML:如何在序列图中表示间接操作调用?
- typescript - 开玩笑测试 - TypeError: d is not a function
- symfony - 如何解决 Symfony 4 webpack/encore 加载错误?
- php - 无法读取我的电报机器人的属性 (php://input)
- graph - 在图中找到访问次数最多的节点
- ios - 制作一个 Tabbar 控制器 rootViewController
- java - 对静态块的渴望初始化