java - 获取内存中的日志对象 - Logback

标签 java spring-boot logback slf4j

我在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/

相关文章:

java - 如何搜索文件并为流程构建器提供路径

java - Spring Cloud Vault 从错误的配置文件中获取属性

java - 如何让Kafka消费者从特定主题分区读取Spring Boot

java - 属性文件存在,但仍然收到 "WARN No appenders could be found"

java - 应用程序不将日志保存到特定的附加程序

java - 调整在 java 中读取大型 InputStream 的性能

Java Stream 有状态的 findFirst

java - spring-rabbit 中的 ClassNotFoundException 取决于消费者或生产者何时启动

java - 在 FileAppender 中使用 Logback 标记时出错

java - 在 GWT 中创建独立代码