在Tomcat中将System.out.print()内容写入日志文件,有几种方法可以实现:
方法1:配置Tomcat的logging.properties
修改Tomcat的conf/logging.properties文件:
python
# 将System.out重定向到日志文件
handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
# Catalina日志处理器
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.formatter = org.apache.juli.OneLineFormatter
# 控制台处理器(捕获System.out)
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
方法2:使用日志框架(推荐)
在代码中使用标准的日志框架,如Log4j2、Logback或SLF4J:
使用Log4j2示例:
java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class YourClass {
private static final Logger logger = LogManager.getLogger(YourClass.class);
public void yourMethod() {
// 替换 System.out.print(jsonObject);
logger.info("JSON内容: {}", jsonObject.toString());
}
}
使用SLF4J + Logback:
java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class YourClass {
private static final Logger logger = LoggerFactory.getLogger(YourClass.class);
public void yourMethod() {
logger.info("JSON对象: {}", jsonObject);
}
}
方法3:重定向System.out
在Servlet或Filter中重定向System.out:
java
public class LoggingFilter implements Filter {
private PrintStream originalOut;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 创建指向Tomcat日志文件的PrintStream
try {
String logPath = System.getProperty("catalina.base") + "/logs/myapp.out";
PrintStream fileOut = new PrintStream(new FileOutputStream(logPath, true));
originalOut = System.out;
System.setOut(fileOut);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
public void destroy() {
if (originalOut != null) {
System.setOut(originalOut);
}
}
}
方法4:配置log4j2.xml
创建src/main/resources/log4j2.xml:
XML
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="FileAppender" fileName="${sys:catalina.base}/logs/myapp.log">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Pattern>
</PatternLayout>
</File>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="FileAppender"/>
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
使用日志框架可以更专业地管理日志,而不是依赖System.out这种调试性质的输出方式。