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

相关推荐
小陈工1 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey1 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
一定要AK5 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao5 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao6 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024066 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨6 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9996 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n6 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos