Java中将System.out内容写入Tomcat日志
在Tomcat中将System.out.print()内容写入日志文件,有几种方法可以实现:
方法1:配置Tomcat的logging.properties
修改Tomcat的conf/logging.properties文件:
# 将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示例:
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:
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:
public class LoggingFilter implements Filter {private PrintStream originalOut;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 创建指向Tomcat日志文件的PrintStreamtry {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();}}@Overridepublic void destroy() {if (originalOut != null) {System.setOut(originalOut);}}
}方法4:配置log4j2.xml
创建src/main/resources/log4j2.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这种调试性质的输出方式。
