8.idea創建maven項目(使用Log4j日志記錄框架+Log4j 介紹)

8.idea創建maven項目(使用Log4j日志記錄框架+Log4j 介紹)

在 IntelliJ IDEA 的 Maven 項目中引入了 Log4j,并配置了日志同時輸出到控制臺和文件。
Log4j 提供了靈活的日志配置選項,可以根據項目需求調整日志級別、輸出目標和格式。

1. 創建 Maven 項目

  1. 打開 IntelliJ IDEA。
  2. 選擇 “File” > “New” > “Project…”。
  3. 選擇 “Maven”,點擊 “Next”。
  4. 填寫 GroupId 和 ArtifactId,點擊 “Next”。
  5. 確認項目位置,點擊 “Finish”。

2. 添加 Log4j 依賴

在項目的 pom.xml 文件中添加 Log4j 2.x 依賴:
在這里插入圖片描述

    <!-- 項目依賴 --><dependencies><!-- Log4j 2.x 依賴 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.20.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependency></dependencies>

3. 創建 Log4j 配置文件

src/main/resources 目錄下創建 log4j2.xml 文件,配置 Log4j 的日志輸出格式和級別:
在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<!-- Log4j 2.x 配置文件這個文件定義了日志記錄的行為,包括日志級別、輸出目標、格式等。
-->
<Configuration status="WARN"><!-- <Configuration> 根元素- status: 設置 Log4j 自身的日志級別(如 WARN、ERROR 等)。用于調試 Log4j 自身的運行狀態。--><Appenders><!-- <Appenders> 元素- 定義日志輸出的目標(Appender)。- 可以配置多個 Appender(如控制臺、文件、數據庫等)。--><!-- 控制臺輸出 Appender --><Console name="Console" target="SYSTEM_OUT"><!-- <Console> 元素- name: Appender 的名稱(用于在 Logger 中引用)。- target: 輸出目標(SYSTEM_OUT 表示標準輸出,即控制臺)。--><!-- 日志格式化配置 --><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><!-- <PatternLayout> 元素- pattern: 定義日志消息的格式。- %d{HH:mm:ss.SSS}: 日期時間(時:分:秒.毫秒)。- [%t]: 線程名(中括號包裹)。- %-5level: 日志級別(左對齊,寬度為 5)。- %logger{36}: 日志記錄器名稱(最大長度為 36)。- %msg: 日志消息。- %n: 換行符。--></Console><!-- 文件輸出 Appender --><File name="File" fileName="logs/app.log"><!-- <File> 元素- name: Appender 的名稱(用于在 Logger 中引用)。- fileName: 指定日志文件的路徑和名稱。--><!-- 日志格式化配置 --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><!-- <PatternLayout> 元素- pattern: 定義日志消息的格式。- %d{yyyy-MM-dd HH:mm:ss.SSS}: 日期時間(年-月-日 時:分:秒.毫秒)。- [%t]: 線程名(中括號包裹)。- %-5level: 日志級別(左對齊,寬度為 5)。- %logger{36}: 日志記錄器名稱(最大長度為 36)。- %msg: 日志消息。- %n: 換行符。--></File></Appenders><Loggers><!-- <Loggers> 元素- 定義日志記錄器的配置(如日志級別、輸出目標)。--><!-- 根日志記錄器配置 --><Root level="info"><!-- <Root> 元素- level: 設置根日志記錄器的日志級別(如 DEBUG、INFO、WARN、ERROR)。低于該級別的日志將不會被記錄。--><!-- 引用 Appender --><AppenderRef ref="Console"/><AppenderRef ref="File"/><!-- <AppenderRef> 元素- ref: 引用之前定義的 Appender 的名稱(如 "Console" 和 "File")。將日志輸出到指定的 Appender。--></Root></Loggers>
</Configuration>

4. 編寫示例代碼

src/main/java 目錄下創建一個 Java 類,使用 Log4j 記錄日志:
在這里插入圖片描述

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class App {// 獲取 Logger 實例,用于記錄日志private static final Logger logger = LogManager.getLogger(App.class);public static void main(String[] args) {// 記錄 INFO 級別的日志logger.info("程序啟動");try {// 示例:記錄輸入輸出String input = "Hello, Log4j!";// 記錄 DEBUG 級別的日志(只有 DEBUG 及以上級別的日志會被記錄)logger.debug("輸入內容: {}", input);String output = processInput(input);logger.debug("輸出內容: {}", output);// 記錄 INFO 級別的日志logger.info("程序運行正常");} catch (Exception e) {// 記錄 ERROR 級別的日志,并附帶異常信息logger.error("程序運行出錯", e);}}// 示例方法:處理輸入字符串private static String processInput(String input) {return input.toUpperCase();}
}

5. 運行程序

  1. 在 IntelliJ IDEA 中右鍵點擊 App 類。
  2. 選擇 “Run ‘App.main()’”.
  3. 程序運行后,日志會同時輸出到控制臺和文件 logs/app.log
5.1 由于log4j2.xml配置了記錄級別≥info,所以控制臺與文件,未記錄debug級別的日志

在這里插入圖片描述
在這里插入圖片描述

5.2 修改log4j2.xml,配置為記錄級別≥debug,查看運行結果,結果便記錄了≥debug日志級別的日志

在這里插入圖片描述

Log4j 介紹

1. Log4j 是什么?

Log4j 是一款功能強大、靈活且高性能的Java 日志記錄框架,尤其是 Log4j 2.x 版本,解決了 Log4j 1.x 的許多問題,并提供了許多高級功能。它是許多大型 Java 項目的首選日志框架。然而,在使用時需要注意安全配置(如避免 Log4Shell 漏洞),并根據項目需求選擇合適的日志級別和輸出目標。它提供了靈活的日志記錄功能,支持將日志輸出到控制臺、文件、數據庫、網絡等多種目標,并支持日志級別、格式化、過濾等高級功能。

2. Log4j 的主要版本
  • Log4j 1.x

    • 第一個穩定版本,功能強大但設計較老舊。
    • 已被官方標記為“結束生命周期”(EOL),不再維護。
    • 存在一些已知的安全漏洞(如 Log4Shell 漏洞)。
  • Log4j 2.x

    • 完全重寫的版本,性能更高、功能更豐富。
    • 支持異步日志記錄、Lambda 表達式、插件化架構等。
    • 是當前推薦使用的版本。
3. Log4j 的核心組件

Log4j 的架構主要由以下組件組成:

  1. Logger(日志記錄器)

    • 用于記錄日志消息的入口。
    • 通過類名或名稱空間獲取 Logger 實例(如 LogManager.getLogger(MyClass.class))。
    • 支持日志級別(如 DEBUGINFOWARNERROR)。
  2. Appender(輸出目標)

    • 定義日志輸出的目標(如控制臺、文件、數據庫、網絡等)。
    • 常用 Appender:
      • ConsoleAppender:輸出到控制臺。
      • FileAppender / RollingFileAppender:輸出到文件(支持滾動日志)。
      • SocketAppender:通過網絡輸出到遠程服務器。
  3. Layout(日志格式化)

    • 定義日志消息的格式(如時間、線程名、日志級別、日志消息等)。
    • 常用 Layout:
      • PatternLayout:支持自定義格式(如 %d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n)。
      • JSONLayout:輸出 JSON 格式的日志。
  4. Filter(過濾器)

    • 用于過濾日志消息(如根據日志級別、日志內容等)。
  5. Level(日志級別)

    • 定義日志的優先級,從低到高:
      • TRACE:調試細節。
      • DEBUG:調試信息。
      • INFO:一般信息。
      • WARN:警告信息。
      • ERROR:錯誤信息。
      • FATAL:嚴重錯誤。
4. Log4j 的工作原理
  1. 日志記錄流程

    • 應用程序通過 Logger 實例調用日志方法(如 logger.info("message"))。
    • Log4j 根據日志級別和配置決定是否記錄該消息。
    • 如果記錄,消息會通過 Appender 輸出到目標(如控制臺、文件)。
    • 在輸出前,可以通過 Layout 格式化消息。
  2. 配置方式

    • XML 配置:通過 log4j2.xml 文件配置。
    • Properties 配置:通過 log4j2.properties 文件配置。
    • 編程式配置:通過 Java 代碼動態配置。
5. Log4j 的優勢
  • 高性能
    • Log4j 2.x 支持異步日志記錄,通過 LMAX Disruptor 庫實現無鎖隊列,大幅提高日志記錄性能。
  • 靈活性
    • 支持多種 Appender、Layout 和 Filter,可以輕松擴展。
  • 易用性
    • 提供簡單的 API 和豐富的配置選項。
  • 可維護性
    • 日志級別和輸出目標可以動態調整(無需重啟應用)。
  • 安全性
    • Log4j 2.x 修復了 Log4j 1.x 中的安全漏洞(如 Log4Shell)。
6. Log4j 的安全注意事項
  • Log4Shell 漏洞
    • Log4j 1.x 和 Log4j 2.x 的早期版本存在嚴重的遠程代碼執行漏洞(CVE-2021-44228)。
    • 解決方案:
      • 升級到 Log4j 2.17.1 或更高版本。
      • 禁用 JNDI 查找(通過配置 log4j2.component.properties 或環境變量)。
  • 最小權限原則
    • 日志文件和配置文件的目錄應設置適當的權限,防止未授權訪問。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78677.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78677.shtml

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

相關文章

【和春筍一起學C++】函數——C++的編程模塊

目錄 1. 原型句法 2. 函數分類 3. 函數參數之按值傳遞 4. 數組作為函數參數 在C中&#xff0c;要使用函數&#xff0c;必須要有這三個方面&#xff1a; 函數原型&#xff0c;函數原型描述了函數到編譯器的接口&#xff0c;函數原型一般放在include文件中。函數原型告訴編譯…

深挖Java基礎之:認識Java(創立空間/先導:Java認識)

今天我要介紹的是在Java中對Java的一些基本語法的認識與他們的運用&#xff0c;以及擬舉例子說明和運用場景&#xff0c;優勢和劣勢&#xff0c; 注&#xff1a;本篇文章是對Java的一些基本的&#xff0c;簡單的代碼塊的一些內容&#xff0c;后續會講解在Java中的變量類型&…

Python+Selenium+Pytest+Allure PO模式UI自動化框架

一、框架結構 allure-report&#xff1a;測試報告base&#xff1a;定位元素封裝data&#xff1a;數據log&#xff1a;日志文件page&#xff1a;頁面封裝文件夾report&#xff1a;緩存報告testcases&#xff1a;測試用例層utils&#xff1a;工具類run.py&#xff1a;執行文件 二…

博物館除濕控濕保衛戰:M-5J1R 電解除濕科技如何重塑文物守護的未來

在盧浮宮幽深的長廊里&#xff0c;達芬奇的《蒙娜麗莎》正經歷著一場看不見的戰爭——不是來自時間的侵蝕&#xff0c;而是空氣中無形的水分子。每一件文物都在與濕度進行著無聲的抗爭&#xff0c;這場抗爭關乎人類文明的延續。濕度&#xff0c;這個看不見的文物殺手&#xff0…

【嘉立創EDA】如何找到曲線和直線的交點,或找到弧線和直線的交點

文章路標?? :one: 文章解決問題:two: 主題內容:three: 參考方法be end..1?? 文章解決問題 操作環境:嘉立創EDA專業版 V2.2.38 本文使用嘉立創EDA,描述如何快速找到曲線和直線交點的方法,這里的曲線包括了弧線等。本文將此過程記錄,以供有需要的讀者參考。 2?? 主題…

大語言模型能否替代心理治療師的深度拓展研究:fou

大語言模型能否替代心理治療師的深度拓展研究 在科技初創企業和研究領域,大型語言模型(LLMs)用于替代心理健康服務提供者的應用備受關注。但研究人員通過對主要醫療機構治療指南的梳理回顧,并對當前 LLMs(如 gpt-4o)進行實驗評估后發現,LLMs 存在對心理疾病患者表達污名…

【linux】Chrony服務器

簡介 1.1 時間的重要性 由于 IT 系統中&#xff0c;準確的計時非常重要&#xff0c;有很多種原因需要準確計時&#xff1a; 在網絡傳輸中&#xff0c;數據包括和日志需要準確的時間戳 各種應用程序中&#xff0c;如訂單信息&#xff0c;交易信息等 都需要準確的時間戳 1.2 時區…

mysql查看哪些表的自增id已超過某個值

場景 想看哪些表數據比較大&#xff0c;如果用count 比較慢&#xff0c;同時表設計如果是自增&#xff0c;有沒有辦法一次查出自增id已超過某值的所有表呢。 方法 SELECT AUTO_INCREMENT,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 庫名 AND AUTO_INCRE…

SiamMask原理詳解:從SiamFC到SiamRPN++,再到多任務分支設計

SiamMask原理詳解&#xff1a;從SiamFC到SiamRPN&#xff0c;再到多任務分支設計 一、引言二、SiamFC&#xff1a;目標跟蹤的奠基者1. SiamFC的結構2. SiamFC的局限性 三、SiamRPN&#xff1a;引入Anchor機制的改進1. SiamRPN的創新2. SiamRPN的進一步優化 四、SiamMask&#x…

SpringBoot終極形態:AI生成帶OAuth2鑒權的微服務模塊(節省20人日)

在數字化轉型的浪潮中,開發效率和質量是企業競爭力的關鍵要素。飛算 JavaAI 作為一款創新的 AI 工具,能在 Spring Boot 開發中,自動生成完整微服務模塊,極大提升開發效率。下面,我們就詳細介紹如何借助飛算 JavaAI,實現 Spring Boot 微服務模塊的自動化生成。 飛算 JavaAI 簡介…

Spring緩存注解深度實戰:3大核心注解解鎖高并發系統性能優化?

引言&#xff1a;緩存——高并發系統的“性能加速器”? 在互聯網應用中&#xff0c;數據庫查詢往往是性能瓶頸的核心。當每秒數千次的請求直接沖擊數據庫時&#xff0c;系統響應速度會急劇下降&#xff0c;甚至引發宕機風險。?緩存技術?應運而生&#xff0c;成為解決這一痛…

CSS元素動畫篇:基于當前位置的變換動畫(二)

基于當前位置的變換動畫&#xff08;二&#xff09; 前言旋轉效果類元素動畫搖擺動畫效果效果預覽代碼實現 搖晃動畫效果效果預覽代碼實現 螺旋旋轉效果預覽代碼實現 結語 前言 CSS元素動畫一般分為兩種&#xff1a;一種是元素基于當前位置的變換動畫&#xff0c;通過不明顯的…

Qt/C++開發監控GB28181系統/設備注冊/設備注銷/密碼認證/心跳保活/校時

一、前言 根據gb28181協議文檔&#xff0c;第一步就是需要實現設備的注冊&#xff0c;和onvif不同&#xff0c;gb是反過來的&#xff0c;設備端主動連接服務端&#xff0c;而onvif是服務端主動發出搜索&#xff0c;設備被動應答&#xff0c;包括后續的交互幾乎都是被動應答&am…

MATLAB 中的圖形繪制

一、線圖 plot 函數用來創建x和y值的簡單線圖。 x 0 : 0.05 : 30; %從0到30&#xff0c;每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若&#xff08;x&#xff0c;y&#xff0c;LineWidth&#xff0c;2&#xff09;可變粗 xlabel("橫軸標題") ylab…

go語言八股文(五)

1.go的局部變量是分配在棧上還是在堆上 在Go語言中&#xff0c;局部變量的內存分配&#xff08;棧或堆&#xff09;由編譯器基于逃逸分析&#xff08;escape analysis&#xff09;來決定。以下是總結和具體示例&#xff1a; 棧上分配 當局部變量的生命周期嚴格限定在函數作用…

Gradients of Matrix-Matrix Multiplication in Deep Learning

Gradients of Matrix-Matrix Multiplication in Deep Learning 1. Matrix multiplication2. Derivation of the gradients2.1. Dimensions of the gradients2.2. The chain rule2.3. Derivation of the gradient ? L ? A \frac{ {\partial L} }{ {\partial \boldsymbol {\bo…

Spring Boot 框架簡介

? Spring Boot 框架簡介 1?? &#x1f680; 快速構建 Spring Boot 能夠快速構建可直接運行的、企業級 Spring 應用。 2?? ?? “約定優于配置” 該框架采用"約定優于配置"理念&#xff0c;默認集成 Spring 平臺與主流第三方庫&#xff0c;開發者僅需簡單配置…

【Robocorp實戰指南】Python驅動的開源RPA框架

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心代碼實現案例1&#xff1a;網頁數據抓取案例2&#xff1a;Excel報表生成 運行結果驗證 三、性能對比測試方…

如何使用 Spring Boot 實現分頁和排序:配置與實踐指南

在現代 Web 應用開發中&#xff0c;分頁和排序是處理大量數據時提升用戶體驗和系統性能的關鍵功能。Spring Boot 結合 Spring Data JPA 提供了簡單而強大的工具&#xff0c;用于實現數據的分頁查詢和動態排序&#xff0c;廣泛應用于 RESTful API、后臺管理系統等場景。2025 年&…

使用 LLM助手進行 Python 數據可視化

在數據科學中&#xff0c;數據可視化是一項至關重要的任務&#xff0c;旨在揭示數據背后的模式和洞察&#xff0c;并向觀眾傳達這些信息。然而&#xff0c;在編程語言&#xff08;如 Python&#xff09;中創建有洞察力的圖表有時可能會耗時且復雜。本文介紹了一種借助 AI 助手&…