作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个名为 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>
这是它的样子:
关于java - Logback 中的 CyclicBufferAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967261/
有一个名为 CyclicBufferAppender 的附加程序在 logback 中,似乎没有例子。它有什么作用?它是如何在 RollingFileappender 的上下文中工作的? ?它可以与
我是一名优秀的程序员,十分优秀!