【问题标题】:Logback Groovy Configuration slowLogback Groovy 配置缓慢
【发布时间】:2015-01-26 19:48:16
【问题描述】:

我一直在使用 Logback Groovy 配置,现在我发现这是启动非常慢的原因。 HelloWorld“应用程序”需要大约一秒钟。之前在 web 服务器的上下文中我没有注意到速度变慢,但是现在当我经常需要运行一些相当简单的工具时,这是不可接受的。

Q1:我还是不敢相信,我的配置文件很小,一秒很大,谁能确认一下?

我可以想象很容易将除一部分之外的所有内容重写回 XML。有问题的部分是我自己的过滤器及其两种方法,例如

public class MyLogbackFilter extends Filter<ILoggingEvent> {
    public MyLogbackFilter accept(String prefix, Level level) {...}
    public MyLogbackFilter accept(String prefix, Level level) {...}
   ...
}

通过类似的方式配置

filter = new MyLogbackFilter()
    .accept("com.example.pck1.Class1", TRACE)
    .accept("com.example.pck1.Class2", TRACE)
    .deny("com.example.pck1", TRACE)
    .accept("", WARNING)
    .deny("", INFO);

规则会自上而下进行评估,例如,来自 com.example.pck1.Class1 级别 TRACE 或更高级别的所有内容都将被接受,无论以后指定什么。

Q2:我能否以某种方式让 logback 读取配置文件,例如

A com.example.pck1.Class1 TRACE
A com.example.pck1.Class2 TRACE
D com.example.pck1 TRACE
A * WARNING
D * INFO

并将其提供给我的班级?解释就是花生。

【问题讨论】:

    标签: java logging groovy configuration logback


    【解决方案1】:

    真诚地说,我从来不知道您可以按类进行 nders,但是您可以将 xml 配置文件添加到您的项目中,并且 logback 库会尝试在类路径中找到 xml(通常,在 maven 中,您将 xml 放入资源文件)。

    文件可以是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
      <configuration>
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
          <file>/usr/java/logs/floresTrace.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
              <fileNamePattern>/path/to/file/myfile.%i.log.zip</fileNamePattern>
              <minIndex>1</minIndex>
              <maxIndex>3</maxIndex>
            </rollingPolicy>
    
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
              <maxFileSize>1MB</maxFileSize>
            </triggeringPolicy>
            <encoder>
              <pattern>%d{YYYY-MM-dd HH:mm:ss} %level [%thread] %logger{10} [%file:%line]   %msg%n</pattern>
           </encoder>
    </appender>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
      </encoder>
    </appender>
    <!-- you can, however add loggers by package here-->
    <logger name="your.package.one" level="DEBUG"/>
    <logger name="your.package.two" level="INFO"/>
    
    <root level="debug">
       <appender-ref ref="FILE" />
       <appender-ref ref="STDOUT" />
    </root>
    </configuration>
    

    因此,正如评论所说,您可以按包添加记录器。希望这会有所帮助。

    【讨论】:

    • 我不知道顶层的“按包添加记录器”是做什么的。想象一下,我希望 FILE appender 编写所有内容,而 STDOUT appender 仅按包编写指定的级别。我能做到吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多