当前位置: 首页 > 知识库问答 >
问题:

Spring引导回日志自动连线

方河
2023-03-14

我正在运行一个使用logback的Spring Boot应用程序。其思想是将日志消息发送到RabbitMQ服务器。为了实现这一点,我创建了一个扩展ch.qos的appender。向后退。果心附录基。

这是我的回程Spring。xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="messaging" class="com.foo.logging.appender.MessagingAppenderLogback" />
    <root level="info">
        <appender-ref ref="messaging" />
    </root>
</configuration>

一切都好。但是,在MessagingAppenderLogback中,我希望用来发送消息的RabbitTemboard为空。

@Component
public class MessagingAppenderLogback extends AppenderBase<ILoggingEvent> {
    @Autowired
    RabbitTemplate rabbitTemplate;

    public MessagingAppenderLogback(){ }

    @Override
    protected void append(ILoggingEvent event) {
        System.out.println("  MessagingAppenderLogback#append w/ event " + event);
        // rabbitTemplate.convertAndSend(event);
    }   
}

根据留档,我知道"日志系统在应用程序的早期初始化..."

我想知道我必须做什么才能在我的附件中提供兔子模板。

共有3个答案

呼延弘方
2023-03-14

我也有同样的问题。但是,在应用代码后,我的自动连接字段仍然为空:-(?我应该检查什么?

这是我的密码:

import java.util.Date;
import java.util.function.Consumer;

import javax.annotation.PostConstruct;

import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Component;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;

@Component
@EnableAutoConfiguration
public class RabbitMQAppender extends AppenderBase<ILoggingEvent>
{
    @Autowired
    private EventPublisher eventPublisher;

    public RabbitMQAppender()
    {
    }

    @Override
    protected void append(ILoggingEvent logEvent)
    {
        System.out.println("RabbitMQ logger in appender: " + event.toString());
    }

    @PostConstruct
    public void init() {
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        context.getLoggerList().forEach(new Consumer<Logger>() {

            @Override
            public void accept(Logger logger) {
                logger.addAppender(RabbitMQAppender.this);
            }
        });

        setContext(context);
        start();
    }    
}

当你说“不要碰logback.xml”时,你的意思是根本不拥有它还是保持原样?当我保存它时,自动连线字段为空。没有它的时候,我的appender根本就没用过。

周涵畅
2023-03-14

我用它玩了一会儿,结果它成功了:

@Component
public class BeanAppender extends AppenderBase<ILoggingEvent> {

    @Autowired
    private UserService userService;

    @Override
    protected void append(ILoggingEvent eventObject) {
        System.out.println("message " + eventObject.getMessage() + " " + eventObject.getLoggerName() + " bean reference" + userService);
    }

    @PostConstruct
    public void init() {
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        context.getLoggerList().forEach(new Consumer<Logger>() {

            @Override
            public void accept(Logger logger) {
                logger.addAppender(BeanAppender.this);
            }
        });

        setContext(context);
        start();
    }
}

假设您不介意以编程方式配置appender,那么它可以为您完成这项任务。你不需要去碰后勤。然后是xml。

伍皓
2023-03-14

您的appender不是Springbean,而是由logback框架实例化的。您不能使用Spring的依赖项注入(@组件@自动连线未被处理)。您需要显式地实例化RabbitTemplate。

无论如何,您可能正在寻找以下内容:http://docs.spring.io/spring-amqp/docs/current/api/org/springframework/amqp/rabbit/logback/AmqpAppender.html

 类似资料:
  • 我知道通过配置服务器和刷新endpoint,可以在Spring启动应用程序中动态更改日志记录级别。为了控制日志轮换策略和文件的json编码,我决定使用logback。但是这会阻止我动态更改日志记录级别。 这意味着只有信息会被写入控制台/文件。但是如果我想在运行时将其更改为调试/跟踪怎么办? 编辑我仍然不理解根级别标记。但是,logback似乎从应用程序获取了日志级别。属性,这基本上回答了我的问题。

  • 我想关闭Spring Boot应用程序控制台上的调试输出。我希望有一个默认的信息记录。但事实并非如此。我试图用暴力来关闭关卡https://mkyong.com/spring-boot/spring-boot-log4j-2-example/我不喜欢这个,现在它甚至不工作。在如何在spring boot中关闭调试日志消息中,这被标记为解决方案。我想不是。我将我的项目减少到最小,并在多种设置中得到此

  • 我已经在spring boot Application.properties中配置了日志路径属性。 在application.properties中的此属性中。它使用日志文件名,并在tomcat日志文件目录中创建一个新的日志文件。我检查了我的系统属性,它设置了LOG_FILE和LOG_PATH属性。我使用了1.3.6版本的spring Boot。任何与此相关的已知问题。我读过一期,似乎很久以前就修

  • 我想用SpringBoot1.5配置log4j。10.释放。我排除了,并添加了log4j依赖项。在spring启动之前,我有所有日志,但在spring启动之后,init日志停止。 控制台日志: 和log4j2。xml文件: 你知道我做错了什么吗?

  • 需要帮助...我在这里做错了什么???我相信它确实从应用程序属性文件中读取路径和文件名。但我不认为它读取了logback.xml或logback-spring.xml 我做了一些研究,发现了许多问题/答案。但是我想每个人都说要把logback xml放在资源中,把路径和文件名放在application.properties.我知道这很简单,但是在某个地方遗漏了一些东西… 提前谢谢!! 应用程序属性

  • 我用的是Spring boot 2.3.1版本,应用日志有问题,我的logback-spring.xml如下, 我的控制器是, 我尝试在应用程序中添加以下内容。属性文件, 运气不好,还尝试了其他替代方法,如下所示,并在中添加了文件路径。 应用程序。日志文件正在创建,我只看到与spring相关的日志,而不是应用程序中的应用程序日志。日志文件。