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

如何使用Spring启动配置日志回溯访问.xml

邬友樵
2023-03-14

我的申请. yml是:

server:
  tomcat:
    accesslog:
      enabled: true
    basedir: my-tomcat

我们使用spring boot 1.4.3.RELEASE,我想用以下内容配置一个logback-access.xml(在src/main/resources下):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- always a good activate OnConsoleStatusListener -->
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%h %l %u %user %date "%r" %s %b</pattern>
    </encoder>
  </appender>

  <appender-ref ref="STDOUT" />
</configuration>

我可以在my-tomcat文件夹下看到一个access_log.2017-01-03.log文件,其中包含正确的访问日志,但在我的concole上注意到,似乎没有读取配置文件logback-access.xml。

有什么想法吗?

埃里克

共有2个答案

梁丘诚
2023-03-14

尽管我为子孙后代发布我简单的工作代码已经迟到了。

可通过以下步骤在控制台日志中打印< code>logback的访问日志:

    < li >添加< code>logback-access依赖关系
    implementation group: 'ch.qos.logback', name: 'logback-access', version: '1.2.3'
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addContextValves(new LogbackValve());
        return tomcat;
    }
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <Pattern>combined</Pattern>
      <Pattern>[ACCESS] %h %l %u %t{yyyy-MM-dd HH:mm:ss.SSS} %s %b %D ms</Pattern>
    </encoder>
  </appender>

  <appender-ref ref="STDOUT" />
</configuration>

访问日志将在控制台中打印为

"[ACCESS] <host> <date> "<httpmethod> <httpuri> HTTP/1.1" <httpstatus> "<timetaken in millisecond> ms""
隗新霁
2023-03-14

是我弄错了,还是Spring Boot本身不支持这一点?

资料来源:https://github.com/spring-projects/spring-boot/issues/2609:

嘿,我正试图让登录访问tomcat和spring boot一起工作。有人能够开箱即用吗?还是需要设置一些必要的管道?

...

As a workaround, you can copy the access xml from the class path to the filesystem and run it there as part of your configuration class

Files.copy(this.getClass().getResourceAsStream("/logback-access.xml"),Paths.get("log-access.xml"),StandardCopyOption.REPLACE_EXISTING);
logbackValve.setFilename("log-access.xml");

简单地添加依赖关系应该可以做到:

<dependency>
    <groupId>net.rakugakibox.spring.boot</groupId>
    <artifactId>logback-access-spring-boot-starter</artifactId>
    <version>2.7.0</version>
</dependency>

关于上面提到的Spring启动问题,有人发布了这个:

从 logback 1.1.6 开始,无需任何解决方法即可将日志回溯访问配置文件作为资源加载。参考编号: http://jira.qos.ch/browse/LOGBACK-1069

您所要做的就是: 日志回退Valve.set文件名(“日志访问.xml”);

 类似资料:
  • 问题内容: 我用http 9200打开了几个客户端节点,以切断ElasticSearch查询/索引。我想通过http 9200从客户端记录访问日志,就像Http- Apache拥有access.log一样。我应该如何在ES中启用它。 问题答案: Elasticsearch本身没有这样的东西。 但是,如果安装Shield插件,则可以通过将其添加到配置文件中来启用审核。 然后,您将在ES日志文件夹中获

  • 我希望将所有内部Springboot日志消息定向到log4j,以便这些消息遵循我的log4j属性,但这是无效的。 登录中。config=file:/data/log/report-log4j。属性 启动springboot,它会输出 log4j:WARN找不到记录器(org.springframework.web.context.support.StandardServleteEnvironmen

  • 在像这样的典型Spring Boot应用程序中,我们如何配置它来使用“自定义”日志配置? 例如,在我的应用程序运行的当前环境中,日志正在导致错误,我如何使用其他日志例如:

  • 在logback.xml中,您可以定义几个< code > 如果我有这样的东西: “development”概要文件是包含“developer”的两个概要文件的联合,还是“developer”概要文件只激活前一个或后一个概要文件?

  • 我最近切换到ApacheLog4J2,仍然找不到使用log4j2配置hibernate日志的方法。xml。 因为我找不到解决这个问题的方法,我仍然使用log4j.properties文件显式Hibernate。这不是最好的解决方案,因为我的log4j2.xml使用JPA appender(将日志写入数据库)。我不想为Hibernate编写单独的逻辑。 有没有办法使用log4j2配置Hibernat

  • 我将spring boot配置为使用log4j和pom.xml中的这些行: