log4j寫入mysql資料庫(log4j輸出sql日誌信息)

本文目錄一覽:

使用log4j把日誌信息保存到資料庫

log4j 包裡面有一個 SQL 的 appender ,但我知道以前的版本中有bug,因為它生成 SQL 時用的是 createStatement 拼接字元串而不是 PreparedStatement ,因此當消息內容中有單引號或特殊符號時 SQL 都有語法錯誤執行不成功。

你需要自己擴展一下它提供自己的 SQLAppender 來做這件事。在網上搜索一個像 decompiler 這樣的 Java 反編譯器或從 Apache 網站去下載 log4j 源碼來看一下 SQL appender 是怎麼樣的,我們改寫它把這個 bug 解決了就可以用了。

如果你打算用 ODBC 數據源而不是 JDBC 來做,你需要確保你的 JRE 是 Oracle / Sun 提供的,因為像 IBM 的 JRE 就沒有自帶 ODBC 驅動程序,或者你自己去手工下載第三方的 ODBC 驅動程序。

從你的錯誤消息說 數據源找不到,對比下面這個圖片,你沒有設置它的 driver 參數,左邊所有以 set 開頭的方法就是表示你在 log4j.properties 文件中可以給它設置的參數,比如,setPassword 表示這個 JDBC Appender 有一個屬性  password。

log4j.appender.mySQLAppender.password = 密碼

log4j.appender.mySQLAppender.user = 用戶名

。。。 其它 set 方法對應的屬性列舉在這裡。。。

依此類推。

我們需要糾正的 bug 在這裡面,你需要提供自己的類繼承原來的 JDBCAppender 把這個 statement 改成 PreparedStatement 來訪問資料庫,就是需要 stmt.setString(1, myMsg); 這種,而不是直接拼接字元串的。

看了它的 JDBCAppender.execute 方法就知道這裡有一個 bug:

如何配置log4j2日誌記錄至資料庫

配置log4j2日誌記錄至資料庫

1、建立用於保存日誌的資料庫表:

CREATE TABLE `sys_log` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `level` varchar(32) NOT NULL,

  `logger` varchar(100) NOT NULL,

  `message` varchar(1000) DEFAULT NULL,

  `exception` varchar(10000) DEFAULT NULL,

  `date_add` datetime NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4;

2、配置 databaseAppender :

JDBC name=”databaseAppender” tableName=”sys_log”

      ConnectionFactory class=”cc.s2m.web.s2mBlog.util.StaticProp” method=”getDatabaseConnection” /

      Column name=”date_add” isEventTimestamp=”true” /

      Column name=”level” pattern=”%level” /

      Column name=”logger” pattern=”%logger” /

      Column name=”message” pattern=”%message” /

      Column name=”exception” pattern=”%ex{full}” /

    /JDBC

3、其中 cc.s2m.web.s2mBlog.util.StaticProp 類的getDatabaseConnection方法為獲取可用的datasource:

DriverManagerDataSource ds = new DriverManagerDataSource();

ds.setDriverClassName(“com.mysql.jdbc.Driver”);

ds.setUrl(“jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8”);

ds.setUsername(“root”);

ds.setPassword(“123456”);

return ds.getConnection();

4、指派需要記錄的日誌,使用 databaseAppender 即可:

logger name=”SYSLOG” level=”INFO” additivity=”false”

      appender-ref ref=”databaseAppender”/ 

/logger

springMVC怎麼使用log4j將數據寫到資料庫

view

plainprint?CREATE02TABLE02log02(02020202[Id]02[int]02IDENTITY02(1,021)02primary02key02NOT02NULL02,02020202[Lg_Date]02[datetime]02NOT02NULL02,02020202[Lg_Thread]02[varchar]02(50)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Level]02[varchar]02(20)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Class]02[varchar]02(200)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL02,02020202[Lg_Message]02[varchar]02(2000)02COLLATE02Chinese_PRC_CI_AS02NOT02NULL0202)0202GO02022.寫log4j.properties文件,這裡我的資料庫舉動是用的JTDS:

引用#

level

:

是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。

#

Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。

log4j.rootLogger=ERROR,DATABASE

log4j.addivity.org.apache=true

#

用於資料庫

log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.DATABASE.URL=jdbc:jtds:sqlserver://localhost:1433;DatabaseName=databasename

log4j.appender.DATABASE.driver=net.sourceforge.jtds.jdbc.Driver

log4j.appender.DATABASE.user=username

log4j.appender.DATABASE.password=password

#

本處設置為”WARN”以上級別在資料庫存儲(默認情況使用rootLogger中的設置)

log4j.appender.DATABASE.Threshold=DEBUG

log4j.appender.DATABASE.sql=INSERT

INTO

log(optime,thread,infolevel,class,message)

VALUES

(‘%d{yyyy-MM-dd

HH:mm:ss}’,

‘%t’,

‘%p’,

‘%l’,

‘%m’)

#

寫入資料庫中的表LOG4J的Message欄位中,

#

內容%d(日期)%c:

日誌信息所在地(類名)%p:

日誌信息級別%m:

產生的日誌具體信息

%n:

輸出日誌信息換行

log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout

log4j.appender.DATABASE.layout.ConversionPattern=[framework]

%d

%c

-%-4r

[%t]

%-5p

%c

%x

%m%n3.在程序中需要將日誌信息寫入資料庫的地方寫入如下代碼:

view

plainprint?

原創文章,作者:XZYW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/146345.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XZYW的頭像XZYW
上一篇 2024-10-29 19:00
下一篇 2024-10-29 19:00

相關推薦

  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Cron執行日誌用法介紹

    本文將從多個方面對cron執行日誌進行詳細闡述,包括cron執行日誌的定義、cron執行日誌的產生原因、cron執行日誌的格式以及如何解讀cron執行日誌。 一、定義 Cron是一…

    編程 2025-04-29
  • Hibernate日誌列印sql參數

    本文將從多個方面介紹如何在Hibernate中列印SQL參數。Hibernate作為一種ORM框架,可以通過列印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • Java 監控介面返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控介面返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Log4j日誌列印到Systemout.log

    Log4j是Apache的一個強大的日誌組件,可以幫助開發者更好地管理日誌。在Java應用程序中,很多開發者都會選擇使用Log4j來實現日誌輸出。本文將介紹如何使用Log4j將日誌…

    編程 2025-04-28

發表回復

登錄後才能評論