我正在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并使用JNDI将其提供给库存SMTPAppender的javax.mail.Session
对象。还是第三件事。只是不在您自己的代码部分。