我在spring-boot 2.2.5.RELEASE
中使用logback,我需要在内存中获取日志对象,以便我可以操纵信息并处理它。
我期望的是这样的。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class application {
Logger logger = LoggerFactory.getLogger(application.class);
public void executeTask(Integer queryMinutes) {
logger.info(INICIO_TRANSACCION, metodo);
try {
//Do something
//Log informative messages
} catch (DBException e) {
//Log ERROR messages
logger.error(MENSAJE_EXCEPCION + e, e);
logger.info(ROLBACK_TRANSACCION);
} finally {
//Here I need to call a method to further process the info printed in the log something like
logger.getMessage();
logger.getLineNumber();
logger.getThread();
callSomeMethod(logger);
logger.info(TIEMPO_PROCESO, (System.currentTimeMillis() - tiempoInicial));
logger.info(FIN_TRANSACCION, metodo);
}
}
}
我知道,当您使用附加程序时,我们通常会定义一个 ILoggingEvent
对象,这可以访问 logger.getMessage()
等,
问题是如何在我的 java 类中获取日志对象,以便我可以访问属性。
最佳答案
logback(和 log4j)的基本设计是它是程序的一部分,但对调用代码不可见。因此,您想要做的事情基本上违背了您想要使用的框架的精神,我建议您重新考虑。
实际上确保目标接收日志事件的组件的 logback 术语是“appender”。 http://logback.qos.ch/manual/appenders.html
问题是您想要使用非标准 API 发送邮件,否则您可能只使用标准 SMTPAppender ( http://logback.qos.ch/manual/appenders.html#SMTPAppender )
我建议要么子类化 SMTPAppender 来执行您想要的操作,要么编写一个实现 JavaMail API 的 javax.mail.Session 对象,并使用 JNDI 将其提供给库存 SMTPAppender。或者第三件事。只是不在您自己的代码部分中。
关于java - 获取内存中的日志对象 - Logback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61715542/