我有一个方法
import org.apache.logging.log4j.Logger;
public class SendEmail
{
Logger log = LogManager.getRootLogger();
public static String getStackTrace(final Throwable throwable)
{
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
return sw.getBuffer().toString();
}
public static void main(String[] args)
{
try
{
//Some Code
}
catch (Exception e)
{
log.error(getStackTrace(e));
}
}
}
我想通过继承将getStackTrace()方法添加到记录器中(注意:记录器是接口而不是类),所以我可以通过日志对象调用它,这样我就可以替换log.error(getStackTrace(e))
; 通过log.error(log.getStackTrace(e))
;有什么帮助吗?
简单的方法是使用logger.error("message", exception)
但是如果你想要你的自定义方法,你需要创建自己的类并将原始记录器保留在里面。有一个错误和调试方法,但如果您需要其他方法,则需要自己创建(如警告)。
public class MyLogger {
final Logger target;
public MyLogger(Logger target) {
this.target = target;
}
public void error(Object message) {
target.error(message);
}
public void debug(Object message) {
target.debug(message);
}
//...
public String getStackTrace(final Throwable throwable) {
final StringWriter sw = new StringWriter();
final PrintWriter pw = new PrintWriter(sw, true);
throwable.printStackTrace(pw);
return sw.getBuffer().toString();
}
}
在另一个类中:
private static final MyLogger logger = new MyLogger(LogManager.getRootLogger());
public void someMethod() {
try {
//
}
catch (Exception e) {
logger.error(logger.getStackTrace(e));
}
}