我正在运行一个使用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);
}
}
根据留档,我知道"日志系统在应用程序的早期初始化..."
我想知道我必须做什么才能在我的附件中提供兔子模板。
我也有同样的问题。但是,在应用代码后,我的自动连接字段仍然为空:-(?我应该检查什么?
这是我的密码:
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根本就没用过。
我用它玩了一会儿,结果它成功了:
@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。
您的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相关的日志,而不是应用程序中的应用程序日志。日志文件。