我正在使用 JBoss 7.1 并希望将自定义处理程序用作模块。问题是处理程序没有添加到我的记录器中。
独立的.xml:
...
<subsystem xmlns="urn:jboss:domain:logging:1.1">
...
<custom-handler name="CUSTOM" class="my.company.logging.handler.MyHandler" module="my.company.logging.handler">
<level name="INFO"/>
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
</custom-handler>
...
<logger category="my.company">
<level name="INFO"/>
<handlers>
<handler name="CUSTOM"/>
</handlers>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
</subsystem>
...
使用 org.jboss.logging.Logger 的演示类:(来自快速入门的示例类:“jboss-as-log4j”)
package my.company.logging.test;
@SessionScoped
@Named
public class LogDemo implements Serializable {
private final Logger logger;
private String text;
public LogDemo() {
logger = Logger.getLogger(getClass());
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public void log() {
logger.info(this.getText());
this.setText(null);
}
}
这样,不会将任何日志发送到我的处理程序。
我还尝试将处理程序添加到 RootLogger,但它适用于所有日志,但不适用于我自己的 Logger 中的日志。
有谁知道问题可能是什么?
问候马丁
编辑:
我的处理程序:
package my.company.logging.handler;
public class MyHandler extends Handler {
private MongoClient mongoClient;
private DB db;
public MyHandler() {
System.out.println("new MyHandler");
if (connect()) {
System.out.println("Mongo connected!");
} else {
System.out.println("Mongo not connected!");
}
}
private boolean connect() {
try {
this.mongoClient = new MongoClient();
this.db = mongoClient.getDB("TestLogging");
return true;
} catch (UnknownHostException e) {
return false;
}
}
@Override
public void close() throws SecurityException {
mongoClient.close();
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
DBCollection collection = db.getCollection(record.getLoggerName());
final BasicDBObject logRecord = new BasicDBObject("message",
record.getMessage());
logRecord.put("level", record.getLevel().toString());
Object[] parameters = record.getParameters();
for (int i = 0; i < parameters.length; i++) {
logRecord.put("Parameter" + i, parameters[i].toString());
}
System.out.println("...");
String result = collection.insert(logRecord).getError();
if (result != null)
System.out.println("something went wrong: " + result);
else
System.out.println("ok");
}
}
注意:当我将此处理程序添加到standalone.xml 中的根记录器时,它适用于除我自己的战争之外的每个模块。
配置仅适用于 JBoss 中的模块还是也适用于战争?