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.pswp.cn/news/38366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38366.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android.system.ErrnoException: open failed: EPERM (Operation not permitted)

android 10(Q)開始增加了沙盒機制,不能直接把文件保存到/sdcard目錄下,只能保存到APP專屬目錄下;AndroidManifest.xml在標簽下增加屬性【android:requestLegacyExternalStorage“true”】可以暫時保存到/sdcard路徑下,但是Android…

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屬性,同…

html的語義化

說說對 html 語義化的理解 去掉或者丟失樣式的時候能夠讓頁面呈現出清晰的結構有利于 SEO:和搜索引擎建立良好溝通,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標簽來確定上下文和各個關鍵字的權重;方便其他設備解析(如屏…

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表達式…

ubuntu 安裝 python3.9

一、 相關背景 之前在dockerfile里面一直使用的是python3.8(忘記為什么選擇這個版本了),想用python3.9,因為覺得3.8有點老了,而且3.9一個重要的feature,是把list作為默認的類型,不需要從typing…

Redis數據結構——Redis簡單動態字符串SDS

定義 眾所周知,Redis是由C語言寫的。 對于字符串類型的數據存儲,Redis并沒有直接使用C語言中的字符串。 而是自己構建了一個結構體,叫做“簡單動態字符串”,簡稱SDS,比C語言中的字符串更加靈活。 SDS的結構體是這樣的…