在内存中获取日志对象-Logback

问题描述 投票:0回答:1

我正在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类中获取日志对象,以便我可以访问属性。

java spring-boot logback slf4j
1个回答
0
投票

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对象。还是第三件事。只是不在您自己的代码部分。

© www.soinside.com 2019 - 2024. All rights reserved.