我正在尝试特别使用 SLF4J 和 Logback 来实现 RollingFile Logger,但我遇到了一个无法解决的异常。这里是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:293)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:76)
at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:53)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117)
at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:53)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302)
at com.upnetix.java.simeonyachev.PlexUserNameApplication.main(PlexUserNameApplication.java:13)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 17 more
Run Code Online (Sandbox Code Playgroud)
那是我的 pom.xml :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/>
</parent>
<dependencies>
<!--SPRING BOOT-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<!-- <exclusions>-->
<!-- …Run Code Online (Sandbox Code Playgroud) 我尝试使用logstash-logback-encoderspring boot 将日志发送到 ELK。但不幸的是我收到这个错误。
|-ERROR in net.logstash.logback.appender.LogstashTcpSocketAppender[LOGSTASH] - Unable to process event: 'java.time.Instant ch.qos.logback.classic.spi.ILoggingEvent.getInstant()' java.lang.NoSuchMethodError: 'java.time.Instant ch.qos.logback.classic.spi.ILoggingEvent.getInstant()'
at java.lang.NoSuchMethodError: 'java.time.Instant ch.qos.logback.classic.spi.ILoggingEvent.getInstant()'
at at net.logstash.logback.composite.loggingevent.LoggingEventFormattedTimestampJsonProvider.getTimestampAsInstant(LoggingEventFormattedTimestampJsonProvider.java:29)
at at net.logstash.logback.composite.loggingevent.LoggingEventFormattedTimestampJsonProvider.getTimestampAsInstant(LoggingEventFormattedTimestampJsonProvider.java:25)
at at net.logstash.logback.composite.AbstractFormattedTimestampJsonProvider.writeTo(AbstractFormattedTimestampJsonProvider.java:164)
at at net.logstash.logback.composite.JsonProviders.writeTo(JsonProviders.java:78)
at at net.logstash.logback.composite.AbstractCompositeJsonFormatter.writeEventToGenerator(AbstractCompositeJsonFormatter.java:290)
at at net.logstash.logback.composite.AbstractCompositeJsonFormatter$JsonFormatter.writeEvent(AbstractCompositeJsonFormatter.java:190)
at at net.logstash.logback.composite.AbstractCompositeJsonFormatter.writeEvent(AbstractCompositeJsonFormatter.java:156)
at at net.logstash.logback.encoder.CompositeJsonEncoder.encode(CompositeJsonEncoder.java:106)
at at net.logstash.logback.encoder.CompositeJsonEncoder.encode(CompositeJsonEncoder.java:80)
at at net.logstash.logback.encoder.CompositeJsonEncoder.encode(CompositeJsonEncoder.java:36)
at at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.encode(AbstractLogstashTcpSocketAppender.java:654)
at at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.writeEvent(AbstractLogstashTcpSocketAppender.java:616)
at at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.onEvent(AbstractLogstashTcpSocketAppender.java:580)
at at net.logstash.logback.appender.AbstractLogstashTcpSocketAppender$TcpSendingEventHandler.onEvent(AbstractLogstashTcpSocketAppender.java:291)
at at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:363)
at at net.logstash.logback.appender.AsyncDisruptorAppender$EventClearingEventHandler.onEvent(AsyncDisruptorAppender.java:350)
at at net.logstash.logback.encoder.com.lmax.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:168)
Run Code Online (Sandbox Code Playgroud)
的版本logstash-logback-encoder是7.4.
|-ERROR …Run Code Online (Sandbox Code Playgroud) spring-boot logstash-logback-encoder elastic-stack spring-logback
我正在使用带有 LogBack 的 SpringBoot,我试图将一个特定包(此处显示为“com.example.somepackagename”)的所有日志语句定向到一个文件。所有其他日志语句都应该转到标准输出。
起初遇到的问题是在启动过程中创建了一个文件“LOG_FILE_IS_UNDEFINED”。然后我在这个问题上用谷歌搜索(例如在 github上找到了这个,或者在 StackOverflow上找到了这个和其他一些),但没有一个附加内容真正解决了这个问题。
基于杂项。我使用 logback-spring.xml-file 提出了以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_PATH" value="${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}" />
<property name="LOG_FILE" value="${LOG_FILE:-ts-msgs.log}" />
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="MSG_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_PATH}/${LOG_FILE}</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n%wex</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${LOG_PATH}/archived/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize> …Run Code Online (Sandbox Code Playgroud) 我正在将应用程序从 Spring Boot 1.x 迁移到 2.x,我在 logback 配置中发现了一些使用 a 的条目LevelRemappingAppender,如下所示:
<appender name="DEBUG_LEVEL_REMAPPER" class="org.springframework.boot.logging.logback.LevelRemappingAppender">
<destinationLogger>org.springframework.boot</destinationLogger>
</appender>
Run Code Online (Sandbox Code Playgroud)
org.springframework.boot.logging.logback.LevelRemappingAppender Boot 2 中不存在,我在迁移指南中找不到替代品或任何提及。
有没有一种简单的方法可以在 Spring Boot 2 中包含这个 Logback 重映射功能?
使用spring boot 2.1.1.RELEASE可以通过提供logback-spring.xml如下文件将日志格式化为JSON :
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
<timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>true</prettyPrint>
</jsonFormatter>
</layout>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="stdout" />
</root>
Run Code Online (Sandbox Code Playgroud)
并添加到 pom.xml
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-json-classic</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback.contrib</groupId>
<artifactId>logback-jackson</artifactId>
<version>0.1.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
确实导致了如下消息:
{
"timestamp" : "2018-12-11T18:20:25.641Z",
"level" : "INFO",
"thread" : "main",
"logger" : "com.netflix.config.sources.URLConfigurationSource",
"message" : "To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.",
"context" : "default"
}
Run Code Online (Sandbox Code Playgroud)
我正在试用 …
我正在使用 spring-boot 并使用 logback 来生成日志。现在我想在每个日志中记录特定的标头。
我怎样才能做到这一点。
我的日志文件是
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty name="appName" source="spring.application.name" defaultValue="apigateway" />
<property name="LOG_PATH" value="${LOG_PATH}" />
<!-- Console logging -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</pattern>
</encoder>
</appender>
<appender name="APPLICATIONLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/applogs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<Pattern>
[%d{YYYY-MM-dd HH:mm:ss.SSS}] [%X{X-B3-CONVID:-}] [%X{X-B3-TraceId:-}] [%X{X-B3-SpanId:-}] [${HOSTNAME}] [%level] [${appName}] [%logger{36}.%M] - %msg %n
</Pattern>
</encoder>
</appender>
<!-- set logger level: e.g. info, trace, debug, error …Run Code Online (Sandbox Code Playgroud) 我正在将 spring 应用程序转换为 spring-boot,使用 boot-starter-parent 版本:2.0.4.RELEASE。当我使用 mvn install 构建时,它运行良好,但是当我尝试使用命令运行应用程序时:mvn spring-boot:run -Dspring.profiles.active=dev,我收到此异常: ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
以下是我的 pom 中的依赖项:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.3.0-alpha4</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
我尝试遵循此问题的建议,并使用新旧版本的 logback(核心和经典)依赖项,并添加“slf4j-log4j12”和“slf4j-simple”,但仍然出现异常。堆栈跟踪是:
java.lang.NoClassDefFoundError:org/slf4j/impl/StaticLoggerBinder 在 org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext (LogbackLoggingSystem.java:285) 在 org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize (LogbackLoggingSystem) .java:102) 在 org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent (LoggingApplicationListener.java:191) 在 org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent (LoggingApplicationListener.java:170) 在 org. springframework.context.event.SimpleApplicationEventMulticaster.invokeListener (SimpleApplicationEventMulticaster.java:167) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster.java:139) 在 org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent (SimpleApplicationEventMulticaster. java:122)在org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:68)在org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48)在org.springframework.boot.SpringApplication .run (SpringApplication.java:316) 在 org.springframework.boot.SpringApplication.run (SpringApplication.java:1258) 在 …
我是否需要担心在 Logback 之上使用 Slf4j 登录到控制台会成为阻塞操作?
我不确定,所以我一直在reactor.logback.AsyncAppender使用io.projectreactor.addons:reactor-logback:3.2.3-RELEASE
我现在遇到的问题是我无法使用 Maven 编译我的代码,因为无法com.sun.java:tools:11-internal满足传递依赖关系。我不知道如何纠正这个问题,所以现在质疑我是否需要这个库。
将 Spring-boot 2.1.4-RELEASE 和 OpenJDK 11.0.3 与 Maven 3.6.0 结合使用
Maven 错误:
[ERROR] Failed to execute goal on project yooblr-web: Could not resolve dependencies for project com.yooblr:yooblr-web:jar:1.0.0-SNAPSHOT: Could not find artifact com.sun.java:tools:jar:11.0.3 at specified path /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/../lib/tools.jar -> [Help 1]
Run Code Online (Sandbox Code Playgroud) maven-3 project-reactor spring-webflux spring-logback java-11
我试图保留 Spring Boot 应用程序的日志,但是,由于生成的日志很大,我试图使用 logback.xml 将大于 350MB 的文件滚动到压缩文件中。
我每天可以滚动几个 MB,但在中途服务开始写入临时文件。我已经尝试了“TimeBasedRollingPolicy”和“Size AndTimeBasedRollingPolicy”以及“SizeAndTimeBasedFNATP”的触发策略,但结果没有改变。.tmp 文件每次都会生成。
我的 Logback.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/home/xyz/logs/ProdLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/home/xyz/logs/log_%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 350MB -->
<maxFileSize>350MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>5</maxHistory>
<!--<maxFileSize>350MB</maxFileSize>-->
</rollingPolicy>
<encoder>
<pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
</Pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
<appender-ref ref="STDOUT"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我看到 logback .tmp 文件问题的票证在 Jira …
我正在尝试构建一个将在我的服务中使用的日志记录库。我希望它带有默认的 Logback 配置(预定义的附加程序)。有没有办法告诉应用程序在将库添加到项目时加载该配置?
理想情况下,我希望将其放在库中的 application.yml 中
logging:
config: classpath:logback.xml
Run Code Online (Sandbox Code Playgroud)
应用程序应该使用该配置,并且如果开发人员想要覆盖该配置,还允许加载自定义应用程序 Logback 配置。
spring-logback ×10
spring-boot ×7
logback ×5
java ×3
logging ×3
slf4j ×2
java-11 ×1
logz.io ×1
maven-3 ×1
spring ×1