标签: logback

动态更改在 tomcat 上运行的 Web 应用程序的 Logback 级别

我在 Tomcat 7 上运行的 java Web 应用程序的资源文件夹中有一个。logback.xml有没有办法在应用程序运行时动态更改应用程序某些类的调试级别?

标准做法是从 CLI 运行一个普通的 java jar,只需logback.xml使用 vim 进行编辑,一段时间后日志就会更新。这对于 tomcat 是否可行,因为我尝试过,但 id 似乎不起作用。

还有更好的办法吗?

java tomcat logback slf4j

1
推荐指数
1
解决办法
2465
查看次数

Logback:如何从日志文件中删除类名和日志级别?

Logback我正在我的应用程序中使用Spring boot

在我的日志文件中,我当前获得示例输出:

16:09:43.299 [pool-2-thread-1] INFO  c.b.r.h.k.s.myClassName - Log message
Run Code Online (Sandbox Code Playgroud)

如何更改日志设置,使其仅如下所示:

16:09:43.299 Log message
Run Code Online (Sandbox Code Playgroud)

"[pool-2-thread-1] INFO"即从日志语句中删除。

java logging spring logback spring-boot

1
推荐指数
1
解决办法
2153
查看次数

抑制 logback 中的信息消息

我工作的应用程序将创建为 jar 文件并通过命令行运行它。不涉及应用程序服务器。当我运行 jar 文件时,来自 logback 的信息会打印在控制台上。如何抑制 logback 包中的所有日志记录

13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/util/target/classes/logback.xml]
13:46:30,588 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
13:46:35,598 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:46:35,605 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
13:46:35,621 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] …
Run Code Online (Sandbox Code Playgroud)

logback slf4j

1
推荐指数
1
解决办法
3932
查看次数

如何在 Spring Boot 中使用 logback 从所有应用程序日志中删除新行

我正在尝试从应用程序日志中删除所有空格和新行。有什么方法可以使用 logback 模式从附加日志中删除所有下一行?

java logback spring-boot

1
推荐指数
1
解决办法
4529
查看次数

Logback 多行模式 - 行分隔符后的文本

我正在为 Logback 配置日志。

XML 配置如下所示:

<configuration>
   <appender name="console" class="...">
     <encoder>
       <pattern>Message:%nText: %m</pattern>
     </encoder>
  </appender>
  ...
</configuration>
Run Code Online (Sandbox Code Playgroud)

这个想法是日志记录应该是多行的:

Message:
Text: [Message text here]
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,出现异常:

ch.qos.logback.core.pattern.parser.Compiler@8dbdac1 中出现错误 - 没有为转换字 [nText] 注册转换类

因此,问题在于“%n”和“Text”字符串合并为一个字符串。

作为解决方法,我可以用空格将它们分开书写:

Message:%n Text: %m
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,空格出现在日志中的“文本”之前

Message:
 Text:
Run Code Online (Sandbox Code Playgroud)

是否有一些解决方案(空字符串或类似的转义字符)?

谢谢。

xml logging logback

1
推荐指数
1
解决办法
5534
查看次数

如何在logback中获取所有appender名称

如何在使用 logback 时获取已在 Java 中的 List 中设置的所有 appender 名称的列表。

java logging logback logback-classic

1
推荐指数
2
解决办法
3027
查看次数

Spring Boot slf4j + log4j2 日志记录被 logback 依赖阻止

我将创建我的第一个 spring boot 应用程序,我正在创建一个类似 helloworld 的应用程序来测试一些功能。其中之一是通过 slf4j 外观进行日志记录。

我想将 log4j2 与 log4j2.json 配置文件一起使用。不幸的是 slf4j 也发现了一个 logback-classic 依赖并开始使用它。查看我的依赖项,只有 spring-boot-starter-parent 依赖于 logback,但 maven 排除语法在父 pom 上不起作用。

我使用本教程使用 slf4j 设置 log4j2。这是我的整个 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.helloworld</groupId>
<artifactId>helloworld</artifactId>
<version>0.1.0</version>

<name>helloworld</name>

    <parent>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <!-- Database -->

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency> …
Run Code Online (Sandbox Code Playgroud)

logback slf4j maven log4j2 spring-boot

1
推荐指数
1
解决办法
5555
查看次数

Logback:是否可以将 TimeBasedRollingPolicy 与 SizeBasedTriggeringPolicy 结合起来?

我使用 LogbackTimeBasedRollingPolicy每小时滚动一次文件:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.log.zip</fileNamePattern>
    <maxHistory>168</maxHistory> <!--7Days-->
    <totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

有时,在我的情况下,原始(尚未滚动)日志文件可能会变得非常大(几个 GB)。我现在想SizeBasedTriggeringPolicy在配置中添加一个,以便在原始日志文件超过特定限制(例如 5GB)时额外滚动文件。因此,日志文件应该每小时滚动一次,除非文件变得很大,那么应该更早滚动。

我尝试过这个:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.%i.log.zip</fileNamePattern>
    <maxHistory>168</maxHistory> <!--7Days-->
    <totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>5GB</maxFileSize>
</triggeringPolicy>
Run Code Online (Sandbox Code Playgroud)

但随后我收到错误,因为它%i与 TimeBasedRollingPolicy 不兼容。

我也尝试过,SizeAndTimeBasedRollingPolicy但它只将滚动的文件分成更小的部分,但不查看原始日志文件的大小。

logging logback rollingfileappender

1
推荐指数
1
解决办法
2272
查看次数

如何在 Logback 中使用 JSON 附加程序?

我正在尝试以 JSON 格式输出所有日志事件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>
<root level="INFO">
    <!--<appender-ref ref="kafkaAppender" />-->
    <appender-ref ref="STDOUT" />
</root>
Run Code Online (Sandbox Code Playgroud)

Maven 依赖:

   <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>4.7</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我在运行此配置时看到错误。我错过了什么吗?

这是堆栈跟踪:

Exception in thread "main" java.lang.AbstractMethodError: net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder.headerBytes()[B
at ch.qos.logback.core.OutputStreamAppender.encoderInit(OutputStreamAppender.java:180)
at ch.qos.logback.core.OutputStreamAppender.setOutputStream(OutputStreamAppender.java:171)
at ch.qos.logback.core.ConsoleAppender.start(ConsoleAppender.java:81)
at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124) …
Run Code Online (Sandbox Code Playgroud)

logback logstash-logback-encoder

1
推荐指数
1
解决办法
4528
查看次数

使用 logback RollingFileAppender 时没有删除旧的日志文件

我的 logback.xml 文件如下,我设置 MaxHistory=1 是为了删除旧的日志文件,只保留一天的日志。但我发现旧文件没有被删除。我仍然可以将它们视为:app.log.2019-02-11 app.log.2019-02-12

<configuration>
    <property name="APP_NAME" value="logbacktest-logs" />
    <property name="LOG_HOME" value="/tmp/${APP_NAME}" />
    <property name="ENCODER_PATTERN" value="%d %C.%method:%L _ %msg%n"/>
    <contextName>${APP_NAME}</contextName>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${ENCODER_PATTERN}</pattern>
        </encoder>
    </appender> 
    <appender name="APP_APPEND" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.log.%d{yyyy-MM-dd}</fileNamePattern>
            <MaxHistory>1</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${ENCODER_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APP_APPEND" />
    </root>

</configuration>
Run Code Online (Sandbox Code Playgroud)

log4j logback

1
推荐指数
1
解决办法
2213
查看次数