- 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/
我正在尝试使用 janino 的条件处理来删除冗余的 logback 配置文件。 下面是我添加的条件逻辑
我有三个独立的项目,每个项目都有自己的嵌入式 logback.xml 文件。这些文件中的每一个都在用户的主目录中包含一个通用的日志配置文件: 在包含之后,我有这个规范: 这允许用户配置
我使用这个logback配置文件: %d{HH:mm:ss.SSS} [%-10.-10thread] %-5level %-30logger{1} - %msg%n
我的公司有一个环境管理工具,使您能够以 Java 编程方式从环境中查找属性。我想利用这个工具来配置 logback。例如,假设我有一个如下的 logback.xml(特别是文件 appender 部分
这似乎是一个粗心的错误,但我似乎找不到原因。使用 logback/slf4j(最新版本 slf4j-api-1.6.1,logback core/classic 0.9.24)进行记录。最简单的测试日
这是经典的logback的错误还是我遗漏了一些东西? The documentation非常明确地表明scanPeriod是可选属性: By default, the configuration fi
我正在尝试设置一个 logback 配置,该配置创建一个解压缩的日志文件作为第一卷,然后将压缩文件写入不同的目录。我相信最好的方法是在单个 appender 中创建多个 rollingPolicy 元
我用各种框架(jsf、Spring、Hibernate)编写了一个网络应用程序,我的记录器库是 Logback 和 slf4j。 目前我无法在日志文件中显示未捕获的异常(例如 NullPointers
这似乎是一个粗心错误,但我似乎找不到原因。使用 logback/slf4j 进行日志记录(最新版本 slf4j-api-1.6.1、logback core/classic 0.9.24)。用于测试的
我需要能够在事件中搜索多种模式中的任何一种,并用屏蔽值替换模式中的文本。这是我们应用程序中的一项功能,旨在防止敏感信息落入日志中。由于信息可能来自多种来源,因此对所有输入应用过滤器是不切实际的。此外,
我怎样才能创建一个 RollingFileAppender在接受谨慎标志的 Logback 中,还允许我指定日志文件的位置? 我尝试了以下操作,但正如我从文档中了解到的,logback 不支持 fil
我在文档中看不到任何相关内容,但收到以下异常 Failed to instantiate [ch.qos.logback.classic.LoggerContext] Reported excepti
我是 Logback 的新手,我正在尝试为 Windows 和 Linux 动态添加带有属性文件的文件路径。 这是我拥有的代码 sinppet,我怎样才能获得 ${MY_HOME} 的值 $
由于我必须登录到自定义(单个)数据库表,我编写了一个自定义 logback appender,扩展了 logback DBAppender . 我有一些单元测试来验证 appender 是否正常工作,
我正在尝试在 micronaut 中设置访问日志,但是,由于 logback-access 库使用 servlet 过滤器,我没有看到直接的方法。有不同的解决方案吗?一些隐藏的 Micronaut 配
我想使用 slf4j+logback 来登录 JBossAS7。 此外,我必须解决以下要求: 我需要在多个已部署的应用程序/EAR 中共享一个 logback 配置/上下文 我需要在运行时更改 log
我已经使用 LogbackValve 为 Tomcat 7.0 启用了 logback-access 日志。我的 logback-access 配置如下所示。 access.lo
我正在开发一个应用程序,使用我的另一个项目作为 Maven 依赖项。 期望 我希望我的依赖项使用自己的 logback.xml 来登录自己的文件。我希望应用程序使用自己的 logback.xml 文件
我在给定的 tomcat 中运行了许多相同的应用程序,它们都在不同的 URL 和 web.xml 文件下。 我想为每个文件创建一个相同的logback.xml。但我希望模式中包含服务器名称或显示名称。
它正在输出到控制台。logger.info("你好,世界信息。");//工作得很好... 但是以下代码返回“无法找到资源”错误: Logger logger = LoggerFactory.getLo
我是一名优秀的程序员,十分优秀!