程序中l(wèi)og4j、stderr、stdout日志詳解(以python、java為例)
前言

1.簡介
這些日志文件有不同的用途和記錄內(nèi)容:
- log4j-active.log:這是由log4j框架生成的日志文件。log4j是一個用于Java應用程序的日志記錄庫,能夠靈活地控制日志輸出的格式和目標(如文件、控制臺等)。這個日志文件通常包含應用程序運行時的各種詳細信息,包括調(diào)試信息、錯誤消息、警告等。
- stderr:標準錯誤輸出日志文件。這個文件通常記錄程序運行過程中產(chǎn)生的錯誤信息和異常。這些錯誤信息對于調(diào)試和解決程序問題非常重要。標準錯誤輸出通常用于分離錯誤消息和正常的程序輸出,便于識別和處理。
- stdout:標準輸出日志文件。這個文件記錄程序的正常輸出信息,比如運行結(jié)果、狀態(tài)信息等。標準輸出通常顯示程序的正常執(zhí)行流程和結(jié)果,用于監(jiān)控程序的運行狀態(tài)。

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() {
// 創(chuàng)建控制臺附加器
ConsoleAppender consoleAppender = new ConsoleAppender();
consoleAppender.setLayout(new PatternLayout("%d [%t] %-5p %c - %m%n"));
consoleAppender.setThreshold(Level.INFO);
consoleAppender.activateOptions();
Logger.getRootLogger().addAppender(consoleAppender);
// 創(chuàng)建文件附加器
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);
// 現(xiàn)在標準輸出會被寫入 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.總結(jié)
- log4j-active.log (Log4j 輸出):
這就像是一本詳細的日記本。你可以在里面記錄各種重要程度的信息,從小事到大事都有。它很靈活,你可以決定記錄什么,怎么記,記到哪里。比如,你可以只記錄重要的事,或者把所有細節(jié)都記下來。這本日記可以保存很久,方便以后查閱。 - stderr (標準錯誤):
想象這是一個緊急警報系統(tǒng)。當出現(xiàn)嚴重問題時,它會立即發(fā)出警報。就像火警警報器,它的目的是立刻引起注意。通常,這些警報會直接顯示在屏幕上,讓你能立即看到。 - stdout (標準輸出):
這更像是一個普通的廣播系統(tǒng)。它用來傳達程序正常運行時的信息,就像商場里的廣播。它不像警報那么緊急,但仍然是傳遞信息的重要渠道。

到此這篇關于程序中l(wèi)og4j、stderr、stdout日志詳解的文章就介紹到這了,更多相關程序中l(wèi)og4j、stderr、stdout日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)
JSON 是文本,使用 JavaScript 對象表示法編寫,Python 有一個內(nèi)置的 json 包,可用于處理 JSON 數(shù)據(jù),本文給大家介紹使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)的方法,感興趣的朋友跟隨小編一起看看吧2023-11-11
使用Pandas實現(xiàn)高效讀取篩選csv數(shù)據(jù)
在數(shù)據(jù)分析和數(shù)據(jù)科學領域中,Pandas?是?Python?中最常用的庫之一,本文將介紹如何使用?Pandas?來讀取和處理?CSV?格式的數(shù)據(jù)文件,希望對大家有所幫助2024-04-04
pandas之分組統(tǒng)計列聯(lián)表pd.crosstab()問題
這篇文章主要介紹了pandas之分組統(tǒng)計列聯(lián)表pd.crosstab()問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
python利用多線程+隊列技術(shù)爬取中介網(wǎng)互聯(lián)網(wǎng)網(wǎng)站排行榜
這篇文章主要介紹了python利用多線程+隊列技術(shù)爬取中介網(wǎng)互聯(lián)網(wǎng)網(wǎng)站排行榜,文章基于python的相關內(nèi)容展開詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
Python突破多線程限制GIL問題的4種實戰(zhàn)解法
GIL(全局解釋器鎖)是CPython解釋器的核心特性,其本質(zhì)是“同一時刻僅允許一個線程執(zhí)行Python字節(jié)碼”,這直接導致Python多線程在CPU密集型任務中無法利用多核優(yōu)勢,本文整理了4種實戰(zhàn)解法,大家可以根據(jù)需要進行選擇2025-12-12
CentOS 6.5下安裝Python 3.5.2(與Python2并存)
這篇文章主要給大家介紹了在CentOS 6.5下安裝Python 3.5.2的方法教程,安裝后的python3與Python2并存,文中分享了詳細的方法步驟,對大家具有一定的參考學習價值,下面來一起看看吧。2017-06-06
python cv2截取不規(guī)則區(qū)域圖片實例
今天小編就為大家分享一篇python cv2截取不規(guī)則區(qū)域圖片實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12

