java 使用log4j显示到界面和文件 并格式化

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Revit SDK 介绍:PanelSchedule 配电盘明细表

前言 这个例子介绍 Revit 的配电盘明细表,PanelSchedule。Revit 的电器专业在国内用的并不是十分广泛,但从功能上来说还是比较完整的。 内容 这个例子里有三个命令: PanelScheduleExport - 导出配电盘明细表InstanceViewCreation - 创建配…

【0基础学爬虫】爬虫基础之网络请求库的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径

Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成…

领航优配:EFT交易是什么意思?

EFT买卖是一种电子资金搬运买卖方法,EFT代表电子资金搬运,将现金从一个银行账户搬运到另一个银行账户。尽管这种买卖方法已经存在了几十年,但随着技能的开展,越来越多的人开始使用它。 从技能视点,EFT买卖是经过计算机…

【C语言】memset()函数

一.memset()函数简介 我们先来看一下cplusplus.com - The C Resources Network网站上memset()函数的基本信息: 1.函数功能 memset()函数的功能是:将一块内存空间的每个字节都设置为指定的值。 这个函数通常用于初始化一个内存空间,或者清空一个内存空间…

elementui form组件出现英文提示

今天让解决一个bug,是表单组件提示词会出现英文。 问题情景如下: 有时会出现中文,有时会出现英文。 解决方法: 经查看,代码采用的是elementui的form组件,在el-form-item中使用了required属性,同…

Fiddler

基础 Fiddler 相当于一个 “代理”,浏览器访问浏览器页面时,就会把HTTP请求先发给Fiddler,Fiddler 再把请求转发给浏览器的服务器,当浏览器服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。 主界面 删除…

Github上git lfs oid sha256文件无法下载的解决方案

问题:github上sha文件无法下载&文件超出限制 当我克隆Github上的一个库时,其中有一个包的内容格式如下: version https://git-lfs.github.com/spec/v1 oid sha256:一堆数字和字母 size 一堆数字 这堆东西类似百度网盘的下载链接和密码&a…

设计HTML5表单

HTML5基于Web Forms 2.0标准对HTML4表单进行全面升级,在保持简便、易用的基础上,新增了很多控件和属性,从而减轻了开发人员的负担。表单为访问者提供了与网站进行互动的途径,完整的表单一般由控件和脚本两部分组成。 1、认识HTML…

LeetCode150道面试经典题-- 汇总区间(简单)

1.题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,…

红黑树(RBTree)

红黑树 1. 红黑树的概念2. 红黑树的性质3. 红黑树节点的定义4. 红黑树的插入操作5. 红黑树与AVL树的比较 1. 红黑树的概念 红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型用途是实现关联数组。它在1972年由鲁道夫贝尔发明&…

【前端二次开发框架关于关闭eslint】

前端二次开发框架关于关闭eslint 方法一方法二方法三方法四:以下是若想要关闭项目中的部分代码时: 方法一 在vue.config.js里面进行配置: module.exports {lintOnSave:false,//是否开启eslint保存检测 ,它的有效值为 true || false || err…

会一点stm32,只后是做嵌入式Linux还是转JAVA?

选择嵌入式Linux还是转向JAVA,取决于你的兴趣、职业规划和就业市场的需求。以下是一些考虑因素:兴趣和擅长:首先,你应该考虑自己对嵌入式Linux和JAVA的兴趣和擅长程度。如果你对嵌入式系统、硬件交互和底层编程更感兴趣&#xff0…

GPT-4 如何为我编写测试

ChatGPT — 每个人都在谈论它,每个人都有自己的观点,玩起来很有趣,但我们不是在这里玩— 我想展示一些实际用途,可以帮助您节省时间并提高效率。 我在本文中使用GPT-4 动机 我们以前都见过这样的情况——代码覆盖率不断下降的项目——部署起来越来越可怕,而且像朝鲜一样…

基于C#UI Automation自动化测试

步骤 UI Automation 只适用于,标准的win32和 WPF程序 需要添加对UIAutomationClient、 UIAutomationProvider、 UIAutomationTypes的引用 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.D…

C++11并发与多线程笔记(2)

C11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach 1. 范例演示线程运行的开始1.1 创建一个线程:1.2 join1.3 datch1.4 joinable 2. 其他创建线程的方法2.1 用类 重载了函数调用运算符2.2 lambda表达式…

Redis数据结构——Redis简单动态字符串SDS

定义 众所周知,Redis是由C语言写的。 对于字符串类型的数据存储,Redis并没有直接使用C语言中的字符串。 而是自己构建了一个结构体,叫做“简单动态字符串”,简称SDS,比C语言中的字符串更加灵活。 SDS的结构体是这样的…

Python-OpenCV中的图像处理-视频分析

Python-OpenCV中的图像处理-视频分析 视频分析Meanshift算法Camshift算法光流 视频分析 学习使用 Meanshift 和 Camshift 算法在视频中找到并跟踪目标对象: Meanshift算法 Meanshift 算法的基本原理是和很简单的。假设我们有一堆点(比如直方 图反向投影得到的点&…

ASR 语音识别接口封装和分析

这个文档主要是介绍一下我自己封装了 6 家厂商的短语音识别和实时流语音识别接口的一个包,以及对这些接口的一个对比。分别是,阿里,快商通,百度,腾讯,科大,字节。 zxmfke/asrfactory (github.c…

ubuntu 安装 cuda

ubuntu 安装 cuda 初环境与设备在官网找安装方式 本篇文章将介绍ubuntu 安装 CUDA Toolkit CUDA Toolkit 是由 NVIDIA(英伟达)公司开发的一个软件工具包,用于支持并优化 GPU(图形处理器)上的并行计算和高性能计算。它…