Spring 启动:堆栈跟踪打印在控制台中,而不是日志文件中



以下是我的 logback.xml 在我的 springboot 应用程序中的配置。

<property name="LOG_DIR" value="${LOG_DIR}" />
<property name="LOG_FILE" value="${LOG_FILE}" />
<appender name="ROLLING_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_DIR}/${LOG_FILE}_old.%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>100</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} - %msg%n
</Pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="ROLLING_LOG" />
</root>

使用以下命令启动应用程序

java -DLOG_DIR=/logs -DLOG_FILE=my.log -jar target/my.jar

我在所有课程中使用@Sl4j。 所有日志都打印在日志文件中,除了异常的堆栈跟踪(e.printStackTrace(之外,它都打印在控制台中。

不是重复的帖子,浏览了几乎所有的帖子都找不到正确的答案

感谢任何帮助

谢谢

如Javadoc中所述:

将此可抛发对象及其回溯到标准错误流。

因此,除非您通过 SLF4J 记录异常,否则堆栈跟踪将不会打印在您的文件中。

如果不控制对printStackTrace的调用,则可以重定向 java 命令的输出以追加到文件中。

java -DLOG_DIR=/logs -DLOG_FILE=my.log -jar target/my.jar >> console.log 2>&1

上述内容会将所有文本附加到文件控制台.log并将标准错误流重定向到标准输出流

若要像在日志文件中一样打印堆栈跟踪,可以使用以下方法。

pom中的Maven依赖.xml

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
String stacktrace = ExceptionUtils.getStackTrace(e); 

Using Core Java

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
sw.toString() 

最新更新