Java中将System.out内容写入Tomcat日志

在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这种调试性质的输出方式。

相关推荐
步行cgn2 分钟前
Spring Boot 绑定嵌套 Bean 详解
java·spring boot·后端
软件黑马王子6 分钟前
12.缓存池优化:对象上限
开发语言·前端框架·c#
阿里嘎多学长8 分钟前
2026-09-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管
流浪00126 分钟前
大模型技术全景(六):AI 的“逐字接龙“——Token 与自回归生成背后的真相
开发语言·人工智能·llm
Raas1001 小时前
AI网关和OpenRouter区别?MAI Gateway(魔芋企业级AI网关)企业级方案对比指南
大数据·开发语言·人工智能·gateway·php·ai网关·mai gateway
点心的游戏开发世界9 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
phltxy9 小时前
C语言操作符详解
java·c语言·算法
步行cgn10 小时前
@Configuration 详解:Spring 配置类的核心注解
java·后端·spring
sunshine22 girl10 小时前
Java学习一 环境配置2 安装和基本使用Idea
java·学习·intellij-idea
事圆则缓11 小时前
Kotlin 协程完全指南
开发语言·kotlin