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
:表示换行符。