以下是我的 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()