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

springboot - 我的logback异步日志哪里配置错了?

徐鸿达
2024-09-10

我的springboot项目中想要异步打印日志到文件,对 logback 做了如下配置

<!-- 异步日志 -->
<appender name="testAsyncAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/asyncLog.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${log.path}/asyncLog.%d{yyyy-MM-dd}.log</FileNamePattern>
        <MaxHistory>30</MaxHistory>
        <totalSizeCap>1GB</totalSizeCap>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{50} - [%thread] - %msg%n</pattern>
    </encoder>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>
<appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="testAsyncAppender" />
    <queueSize>10000</queueSize>
    <discardingThreshold>0</discardingThreshold>
    <neverBlock>true</neverBlock>
</appender>
<logger name="asyncLog" level="info" additivity="false">
    <appender-ref ref="asyncAppender" />
</logger>

java的controller中使用下面代码打印日志

private static final Logger asyncLog = LoggerFactory.getLogger("asyncLog");

public JsonResult selectByPrimaryKey(@PathVariable Integer pk){
    asyncLog.info("异步日志查询之前");
    BillApplyMoney billApplyMoney = service.selectByPrimaryKey(pk);
    asyncLog.info("异步日志查询之后");
    System.out.println("线程ID和名称分别是:" + Thread.currentThread().getId() + " / " + Thread.currentThread().getName());
    return JsonResult.ok(billApplyMoney);
}

在日志文件中打印出线程名称,同时在IDEA控制台中也打印线程名称,照理说如果是异步写入的日志这两处的线程名称应该不一样,结果日志文件中输出的结果是

2024-06-29 15:36:16.352 INFO  asyncLog - [http-nio-7076-exec-2] - 异步日志查询之前
2024-06-29 15:36:16.371 INFO  asyncLog - [http-nio-7076-exec-2] - 异步日志查询之后

控制台中输出的是
线程ID和名称分别是:86 / http-nio-7076-exec-2
两处的线程名称一样,说明我对于 logback 异步日志的配置错了?

共有1个答案

湛鸿
2024-09-10

好像没看到你有用到多线程,都是在用当前线程打印的

 类似资料:
  • 我需要选择一个日志框架来替换log4j。我最初选择slf4j logback作为日志记录,并编写了以下配置,将应用程序日志和apache cxf的日志输出到单独的文件中,并在控制台上输出Spring/hibernate日志: 然而,我开始了解log4j2中的异步日志记录,我想在我的设置中使用log4j2实现异步日志记录,为此我编写了以下配置: log4j2配置可以工作,但它只在文件(app_log

  • 问题内容: 我在查找日志文件时遇到问题。 我在Windows XP的Eclipse 3.7.1中使用Java日志记录- 。我文件的相关行是: 据我所知,执行以下两行之后: 我的日志文件应该在哪里是整数。 我在该目录中有5个不同的文件,通过,但是它们都没有包含我的日志记录,甚至没有包含今天日期的记录。我进行了一些谷歌搜索,发现“ 跟踪和日志记录”表示我的日志应位于其他位置。那里有一个名为的文件,但实

  • 正如logback的文档所说,大多数appender本质上是同步的,但是如果我们将appender包装在异步appender中,那么线程将把数据推送到BlockingQueue中,如果有,比如说X-logback线程将从BlockingQueue获取数据并将其追加。这就是我对它的基本理解。 尝试使用JstackThread转储来测试这个。但是空手返回,没有回退线程的线索。 作为参考,请检查下面lo

  • 我正在Windows上使用WAMP2.2。我需要在我的服务器上设置SSL端口。我的Apache、WAMP和站点在没有SSL的情况下工作得很好。但当我取消对这一行的注释时 在我的httpd.conf中,WAMP服务器不再工作了。(当我重新启动时,它仍然是橙色的)。我假设httpd-ssl.conf中的配置有问题。但我想知道我如何找到错误,使WAMP不能正常启动。WAMP有错误日志文件吗? 这些错误是

  • 本文向大家介绍Spring Boot异步输出Logback日志方法详解,包括了Spring Boot异步输出Logback日志方法详解的使用技巧和注意事项,需要的朋友参考一下 一、介绍 1.1 Logback Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版

  • 我在我的项目中进行了强制日志记录,并且我很难抑制我不想要的日志记录语句。 还有,我在使用log4j时看不到这些记录器。我正在尝试学习Logback,因为我已经被指派来评估它作为团队可能的升级。