程序中log4j、stderr、stdout日志详解(以python、java为例)

 更新时间:2026年06月25日 10:30:12   作者:知行合一。。。  
在复杂系统中,日志管理常需按级别,模块或时间分类存储,这篇文章主要介绍了程序中log4j、stderr、stdout日志的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

1.简介

这些日志文件有不同的用途和记录内容:

  • log4j-active.log:这是由log4j框架生成的日志文件。log4j是一个用于Java应用程序的日志记录库,能够灵活地控制日志输出的格式和目标(如文件、控制台等)。这个日志文件通常包含应用程序运行时的各种详细信息,包括调试信息、错误消息、警告等。
  • stderr:标准错误输出日志文件。这个文件通常记录程序运行过程中产生的错误信息和异常。这些错误信息对于调试和解决程序问题非常重要。标准错误输出通常用于分离错误消息和正常的程序输出,便于识别和处理。
  • stdout:标准输出日志文件。这个文件记录程序的正常输出信息,比如运行结果、状态信息等。标准输出通常显示程序的正常执行流程和结果,用于监控程序的运行状态。

2.Java 中的日志

使用log4j记录日志

首先,需要在项目中引入log4j依赖(如果使用Maven):

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

向标准输出和标准错误输出写信息

使用Java的System.out和System.err可以分别向标准输出和标准错误输出写信息:

public class StdOutErrExample {
    public static void main(String[] args) {
        // 向标准输出写信息
        System.out.println("This is a standard output message");

        // 向标准错误输出写信息
        System.err.println("This is a standard error message");

        // 模拟一个错误
        try {
            int result = 10 / 0;
        } catch (ArithmeticException e) {
            System.err.println("Caught an exception: " + e.getMessage());
        }
    }
}

3.以python为例

4.高阶讲解

1.Log4j 详解

  • Log4j 提供了更复杂的日志管理功能,包括不同的日志级别和灵活的输出配置。
import org.apache.log4j.*;

public class AdvancedLog4jExample {
    private static final Logger logger = Logger.getLogger(AdvancedLog4jExample.class);

    public static void main(String[] args) {
        // 配置 Log4j
        configureLog4j();

        // 使用不同级别的日志
        logger.trace("这是一个 TRACE 级别的消息");
        logger.debug("这是一个 DEBUG 级别的消息");
        logger.info("这是一个 INFO 级别的消息");
        logger.warn("这是一个 WARN 级别的消息");
        logger.error("这是一个 ERROR 级别的消息");
        logger.fatal("这是一个 FATAL 级别的消息");

        // 记录异常
        try {
            throw new RuntimeException("模拟的异常");
        } catch (RuntimeException e) {
            logger.error("捕获到异常", e);
        }
    }

    private static void configureLog4j() {
        // 创建控制台附加器
        ConsoleAppender consoleAppender = new ConsoleAppender();
        consoleAppender.setLayout(new PatternLayout("%d [%t] %-5p %c - %m%n"));
        consoleAppender.setThreshold(Level.INFO);
        consoleAppender.activateOptions();
        Logger.getRootLogger().addAppender(consoleAppender);

        // 创建文件附加器
        try {
            FileAppender fileAppender = new FileAppender(
                new PatternLayout("%d %-5p [%c{1}] %m%n"), 
                "log4j-active.log", 
                true);
            fileAppender.setThreshold(Level.DEBUG);
            Logger.getRootLogger().addAppender(fileAppender);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.System.err 和 System.out 的高级用法

  • 虽然 System.err 和 System.out 相对简单,但它们也有一些高级用法:
import java.io.*;

public class AdvancedSystemIOExample {
    public static void main(String[] args) throws IOException {
        // 重定向 System.out 到文件
        PrintStream outFile = new PrintStream(new FileOutputStream("stdout.log"));
        System.setOut(outFile);

        // 重定向 System.err 到文件
        PrintStream errFile = new PrintStream(new FileOutputStream("stderr.log"));
        System.setErr(errFile);

        // 现在标准输出会被写入 stdout.log
        System.out.println("这条消息会被写入 stdout.log 文件");

        // 标准错误会被写入 stderr.log
        System.err.println("这条错误消息会被写入 stderr.log 文件");

        // 使用自定义的 PrintStream
        PrintStream customOut = new PrintStream(System.out) {
            @Override
            public void println(String x) {
                super.println("自定义前缀: " + x);
            }
        };

        System.setOut(customOut);
        System.out.println("这条消息会有自定义前缀");

        // 恢复原始的标准输出和错误流
        System.setOut(System.out);
        System.setErr(System.err);
    }
}

3.日志使用的最佳实践

4.日志与应用程序性能

5.总结

  • log4j-active.log (Log4j 输出):
    这就像是一本详细的日记本。你可以在里面记录各种重要程度的信息,从小事到大事都有。它很灵活,你可以决定记录什么,怎么记,记到哪里。比如,你可以只记录重要的事,或者把所有细节都记下来。这本日记可以保存很久,方便以后查阅。
  • stderr (标准错误):
    想象这是一个紧急警报系统。当出现严重问题时,它会立即发出警报。就像火警警报器,它的目的是立刻引起注意。通常,这些警报会直接显示在屏幕上,让你能立即看到。
  • stdout (标准输出):
    这更像是一个普通的广播系统。它用来传达程序正常运行时的信息,就像商场里的广播。它不像警报那么紧急,但仍然是传递信息的重要渠道。

到此这篇关于程序中log4j、stderr、stdout日志详解的文章就介绍到这了,更多相关程序中log4j、stderr、stdout日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何使用Python JSON解析和转换数据

    如何使用Python JSON解析和转换数据

    JSON 是文本,使用 JavaScript 对象表示法编写,Python 有一个内置的 json 包,可用于处理 JSON 数据,本文给大家介绍使用Python JSON解析和转换数据的方法,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 使用Pandas实现高效读取筛选csv数据

    使用Pandas实现高效读取筛选csv数据

    在数据分析和数据科学领域中,Pandas 是 Python 中最常用的库之一,本文将介绍如何使用 Pandas 来读取和处理 CSV 格式的数据文件,希望对大家有所帮助
    2024-04-04
  • 使用python进行图像分类的实现步骤

    使用python进行图像分类的实现步骤

    图像分类与识别是计算机视觉中的重要任务,它可以帮助我们自动识别图像中的对象、场景或者特征,在本文中,我们将介绍使用python进行图像分类的实现步骤,感兴趣的小伙伴跟着小编一起来看看吧
    2024-09-09
  • pandas之分组统计列联表pd.crosstab()问题

    pandas之分组统计列联表pd.crosstab()问题

    这篇文章主要介绍了pandas之分组统计列联表pd.crosstab()问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • python利用多线程+队列技术爬取中介网互联网网站排行榜

    python利用多线程+队列技术爬取中介网互联网网站排行榜

    这篇文章主要介绍了python利用多线程+队列技术爬取中介网互联网网站排行榜,文章基于python的相关内容展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python突破多线程限制GIL问题的4种实战解法

    Python突破多线程限制GIL问题的4种实战解法

    GIL(全局解释器锁)是CPython解释器的核心特性,其本质是“同一时刻仅允许一个线程执行Python字节码”,这直接导致Python多线程在CPU密集型任务中无法利用多核优势,本文整理了4种实战解法,大家可以根据需要进行选择
    2025-12-12
  • python替换文件中的某几行操作技巧

    python替换文件中的某几行操作技巧

    这篇文章主要介绍了python替换文件中的某几行,本文介绍使用python正则库打开文件并替换文件中某几行数据的可行方法,需要的朋友可以参考下
    2023-09-09
  • CentOS 6.5下安装Python 3.5.2(与Python2并存)

    CentOS 6.5下安装Python 3.5.2(与Python2并存)

    这篇文章主要给大家介绍了在CentOS 6.5下安装Python 3.5.2的方法教程,安装后的python3与Python2并存,文中分享了详细的方法步骤,对大家具有一定的参考学习价值,下面来一起看看吧。
    2017-06-06
  • python cv2截取不规则区域图片实例

    python cv2截取不规则区域图片实例

    今天小编就为大家分享一篇python cv2截取不规则区域图片实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 使用keras根据层名称来初始化网络

    使用keras根据层名称来初始化网络

    这篇文章主要介绍了使用keras根据层名称来初始化网络,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论