1.下載log4j?
jar包https://dlcdn.apache.org/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.zip
2.?我只要到核心包 ,看需要
sources是源碼包,可以看到說明。在IDEA里先加入class?jar后,再雙擊這個class jar包或或右鍵選Navigate ,Add ,選對應的Sources.jar?
?3.示例代碼
package util;import org.apache.log4j.*;
import org.apache.log4j.spi.LoggingEvent;import javax.swing.*;
import java.awt.*;
import java.io.*;public class Log4j {public static final Logger LOGGER = Logger.getLogger(Log4j.class);private static JTextArea textArea;public static void main(String[] args) {// 創建并顯示UI界面createUI();// 配置log4j日志記錄器configureLogger(textArea);// 示例日志輸出LOGGER.debug("Debug log message");LOGGER.info("Info log message");LOGGER.warn("Warn log message");LOGGER.error("Error log message chenhao");// 關閉log4j日志記錄器LogManager.shutdown();}private static void createUI() {JFrame frame = new JFrame("Log Example");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);textArea = new JTextArea();textArea.setEditable(false);JScrollPane scrollPane = new JScrollPane(textArea);frame.getContentPane().add(scrollPane, BorderLayout.CENTER);frame.setVisible(true);}//配置為 界面輸出 和 文件輸出public static void configureLogger(JTextArea textArea) {// 創建UI界面輸出的AppenderJTextAreaAppender uiAppender = new JTextAreaAppender(textArea);//uiAppender.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %c [%p] - %m%n"));uiAppender.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} [%p] - %m%n"));uiAppender.activateOptions();Logger.getRootLogger().addAppender(uiAppender);// 創建文件輸出的Appendertry {FileAppender fileAppender = new FileAppender(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} [%p] - %m%n"), "logs/logfile.log");fileAppender.setAppend(true); // 如果true,則追加到現有的日志文件末尾;如果false,則覆蓋文件中的現有內容fileAppender.activateOptions();// 將Appender添加到日志記錄器Logger.getRootLogger().addAppender(fileAppender);} catch (IOException e) {e.printStackTrace();return;}// 設置日志記錄級別LOGGER.setLevel(Level.DEBUG);}//配置為 控制臺輸出 和 文件輸出public static void configureLogger() {// 創建控制臺輸出的AppenderConsoleAppender consoleAppender = new ConsoleAppender();consoleAppender.setLayout(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %c [%p] - %m%n"));consoleAppender.setTarget(ConsoleAppender.SYSTEM_OUT);consoleAppender.activateOptions();// 創建文件輸出的Appendertry {FileAppender fileAppender = new FileAppender(new PatternLayout("%d{yyyy-MM-dd HH:mm:ss} %c [%p] - %m%n"), "logs/logfile.log");fileAppender.setAppend(true); // 如果true,則追加到現有的日志文件末尾;如果false,則覆蓋文件中的現有內容fileAppender.activateOptions();// 將Appender添加到日志記錄器Logger.getRootLogger().addAppender(fileAppender);} catch (IOException e) {e.printStackTrace();return;}// 設置日志記錄級別LOGGER.setLevel(Level.DEBUG);}private static class JTextAreaAppender extends AppenderSkeleton {private JTextArea textArea;public JTextAreaAppender(JTextArea textArea) {this.textArea = textArea;}@Overrideprotected void append(LoggingEvent loggingEvent) {String logMessage = layout.format(loggingEvent);SwingUtilities.invokeLater(() -> textArea.append(logMessage));}@Overridepublic void close() {// Nothing to do here}@Overridepublic boolean requiresLayout() {return true;}}
}
4.格式化
解釋一下
"%d{yyyy-MM-dd HH:mm:ss} %c [%p] - %m%n"
每個部分的含義:
%d{yyyy-MM-dd HH:mm:ss}
:表示輸出日志的時間戳,使用指定的日期時間格式("yyyy-MM-dd HH:mm:ss")。
%c
:表示輸出日志的類名。
[%p]
:表示輸出日志的級別(例如,DEBUG、INFO、WARN、ERROR)。
-%m
:表示輸出日志的消息。
%n
:表示換行符。