我在 Tomcat 7 上运行的 java Web 应用程序的资源文件夹中有一个。logback.xml有没有办法在应用程序运行时动态更改应用程序某些类的调试级别?
标准做法是从 CLI 运行一个普通的 java jar,只需logback.xml使用 vim 进行编辑,一段时间后日志就会更新。这对于 tomcat 是否可行,因为我尝试过,但 id 似乎不起作用。
还有更好的办法吗?
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"即从日志语句中删除。
我工作的应用程序将创建为 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 模式从附加日志中删除所有下一行?
我正在为 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)
是否有一些解决方案(空字符串或类似的转义字符)?
谢谢。
如何在使用 logback 时获取已在 Java 中的 List 中设置的所有 appender 名称的列表。
我将创建我的第一个 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) 我使用 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但它只将滚动的文件分成更小的部分,但不查看原始日志文件的大小。
我正在尝试以 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.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)