gpt4 book ai didi

java - Logback 中的 CyclicBufferAppender

转载 作者:行者123 更新时间:2023-12-04 14:16:47 25 4
gpt4 key购买 nike

有一个名为 CyclicBufferAppender 的附加程序在 logback 中,似乎没有例子。它有什么作用?它是如何在 RollingFileappender 的上下文中工作的? ?它可以与 RollingFileappender 一起使用吗?还是独立工作?是否类似于 AsyncAppender ?欢迎任何以编程方式编写的示例。

最佳答案

让我分享一个示例,说明我在哪里使用它来让我的 Spring Boot Web 应用程序在 UI 中显示它自己的日志消息。
我有一个 CyclicBufferAppender子类,InMemoryAppender其唯一目的是让 Spring 将其作为 bean 进行管理。 (灵感来自@NeemePraks 的 this answer。)

@Component
public class InMemoryAppender extends CyclicBufferAppender<ILoggingEvent> implements SmartLifecycle {
@Override
public boolean isRunning() {
return isStarted();
}
}
我在启动期间添加了该组件(这意味着它将错过 Spring Boot 启动日志消息,如链接答案中所示,但我可以接受):
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(WebApplication.class, args);

LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.addAppender(context.getBean(InMemoryAppender.class));
}
我有一个简单的 Controller ,只有一个索引页,它读取 appender 的内容:
@Controller
@RequestMapping(path = "/logs")
public class LogController {
public LogController(InMemoryAppender appender) {
this.appender = appender;
}

private final InMemoryAppender appender;

@GetMapping
public String index(Model model) throws Exception {
ILoggingEvent[] events = new ILoggingEvent[appender.getLength()];
for (int i = 0; i < appender.getLength(); i++) {
events[i] = appender.get(i);
}
model.addAttribute("logs", events);
return "logs/index";
}
}
最后是一个简单的 Thymeleaf 页面来显示日志:
<h1>Logs</h1>

<table style="border-collapse: separate; border-spacing: 2px;">
<thead>
<tr>
<th scope="col">Timestamp</th>
<th scope="col">Level</th>
<th scope="col">Message</th>
</tr>
</thead>
<tbody>
<tr th:each="log: ${logs}" th:object="${log}">
<td th:text="*{#dates.format(timeStamp, 'yyyy-MM-dd HH:mm:ss.SSS')}" style="white-space: nowrap;">[timestamp]</td>
<td th:text="*{level}">[level]</td>
<td th:text="*{message}">[message]</td>
</tr>
</tbody>
</table>
这是它的样子:
enter image description here

关于java - Logback 中的 CyclicBufferAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com