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

相关推荐
蒸蒸yyyyzwd22 分钟前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
睡美人的小仙女1271 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
程序员徐师兄1 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
rayufo1 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk1 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向2 小时前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
五岳2 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
一起养小猫2 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9962 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手3 小时前
Python while 循环 极简核心讲解
java·python·算法