【发布时间】:2015-01-18 07:02:58
【问题描述】:
我花了一些时间想出一种可持续的方法,从JBoss 服务器实时过滤掉我的应用程序中的ERROR 日志。使用Log4j,我可以轻松使用SocketAppender,并且我将其配置为实时通知ERROR 日志的方式。不幸的是,我不能用JBoss AS 7 做到这一点。除了SMTPAppender,我找不到SocketAppender 的实现。所以我想出了一个方法来解决这个问题。请看看我到目前为止做了什么。
我为Logger写了一种包装器。
我的应用程序的示例类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private Logger logger= LoggerFactory.getLogger(MyClass.class);
public void updateData(String data){
logger.info("updating data with {} ",data);
try {
// do somthing
}catch (Exception e){
//something went wrong
logger.error("update fail ",e);// I want to get this message real time
}
}
}
现在我想到了一种获取ERROR日志的方法。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyLogger {
private Logger logger = null;
private MyLogger() {
}
public static MyLogger getLogger(Class clazz) {
MyLogger logger = new MyLogger();
logger.logger = LoggerFactory.getLogger(clazz);
return logger;
}
public void info(String format, Object... arguments) {
logger.info(format,arguments);
}
public void error(String format, Object... arguments) {
// now i can send this message real time,
// i am calling web service with error log by a new Thread
logger.error(format,arguments); // say line number 10
}
}
MyLogger如下使用
public class MyClass {
private static MyLogger logger= MyLogger.getLogger(MyClass.class);
public void updateData(String data){
logger.info("updating data with {} ",data);
try {
// do somthing
}catch (Exception e){
//something went wrong
logger.error("update fail ",e); // say line number 14
}
}
}
此时我的要求匹配,但这会产生一个新问题。
以下是JBoss的logger格式配置
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p (%F:%L) (%t) %s%E%n"/>
现在%F-文件名将变为MyLogger 类。而%L- 行号会变成MyLogger 的行号,导致日志不准确。
部分示例日志
(MyLogger.java : 10) // but this should be (MyClass.java : 14)
现在我把这个模式改成
<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c:%L] (%t) %s%E%n"/>
这几乎可以工作,但%c-class name 给出了预期的正确类。但是没有办法获得行号(正确的行号)。
更改记录器专利后我得到什么
(com.my.test.MyClass : 10) // but this should be (com.my.test.MyClass : 14)
这是我的问题。
- 是否有任何日志附加程序(
SocketAppender或JMSAppender)与JBoss AS7一起工作?(发现没有与 Jboss AS 7 一起工作的解决方案) - 还有比这个更好的方法吗?
- 有没有办法使用这种方法获得正确的行号?
我已经在JBossDeveloper 中提出了一个问题。但至少仍然没有评论。
https://developer.jboss.org/thread/249729
任何帮助都非常感谢。
【问题讨论】:
标签: java logging jboss slf4j appender