當前位置:首頁 » 數據倉庫 » log4j2資料庫日誌
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

log4j2資料庫日誌

發布時間: 2023-05-27 16:36:05

❶ Log4j2自動清理歷史日誌

在 log4j2 中,可以通過配置 RollingFileAppender 的清理策略來實現自動清理日誌孫察,具則塵茄體可以參照官網中對RollingFileAppender配置文件的介紹: https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender 。

另外, log4j1 中的RollingFileAppender雖然無法實現自動清理日誌兄褲的功能,但可以通過自己定義Appender來實現,可參照: log4j自動日誌刪除(轉)

可以通過一個簡單的樣例來查看log4j2的自動清理日誌功能,操作步驟如下:

❷ 【日誌】Log4j2配置

在同步日誌模式下, Logback的性能是最糟糕的,log4j2的性能無論在同步日誌模式還是非同步日誌模式下都是最佳的。本章主要介紹Spring Boot如何集成並配置使用Log4j2

引入Log4j2依賴包,其它依賴和Logback一樣,使用SLF4J統一輸出

然後需要在resource下面添加log4j2.xml配置文件,當然了如果你不添加,springboo會提數銷示你沒有對應文件,並使用默認的配置文件,這個時候級別可以在application.properties中配置

和logback配置類似,主要是含有loggers、appenders,其中loggers由logger,root組成。appenders由console(控制台),File、RollingFile(輸出文件)組成,作用和配置和logback差不多

(1)Console
用來定義輸出到控制台的Appender,主要設置輸出格式和level級別

ThresholdFilter: 定義列印級別,onMismatch值設置是否拒絕其它
(2)File
用來定義輸出到指定位置的文件的Appender

(3)RollingFile
用來定義超過指定條件自動刪除舊的,創建新的Appender

參數說明:

Root節點用來指定項目的根日誌薯沖游,如果沒有單獨指定Logger,那麼就會默認使用該Root日誌輸出

參數說明:

變數配置,類似常量定義

默認判指情況下springboot是不將日誌輸出到日誌文件中,這里對日誌框架的支持有兩種配置方式(和logback一樣):
(1)application.properties 或 application.yml (系統層面)
(2)logback-spring.xml (自定義文件方式)

默認名log4j2-spring.xml,可以省下在application.yml中配置,如果自定義了文件名,需要在application.yml中配置

此種方式可以處理比較復雜的情況,比如區分 info 和 error 日誌、每天產生一個日誌文件。

通過在DefaultRolloverStrategy 標簽下添加Delete標簽實現,保留7天的日誌

IfLastModified .age要和filePattern精確的時間一致, 否則貌似無效.

❸ SpringBoot2.0 基礎案例(02):配置Log4j2,實現不同環境日誌列印

日誌列印是了解Web項目運行的最直接方式,所以在項目開發中是需要首先搭建好的環境。

1、Log4j2特點

1)核心特點

相比與其他的日誌系統,log4j2丟數據這種情況少;disruptor技術,在多線程環境下,性能高;並發的特性,減少了死鎖的發生。

2)性能測試

2、日誌列印之外觀模式

每一種日誌框架都有自己單獨的API,要使用對應的框架就要使用其對應的API,增加應用程序代碼和日誌框架的耦合性。

《阿里巴巴Java開發手冊》,其中有一條規范做了『強制』要求:

SLF4J日誌API

Java簡易日誌門面(Simple Logging Facade for Java,縮寫SLF4J),是一套包裝Logging 框架的界面程式,使用外觀模式實現。

1、項目結構

2、不同環境的日誌配置

使用最直接的方式,不同環境載入不同的日誌配置。

1)開發環境配置

2)生產環境配置

3、Log4j2的配置文件

1、簡單的測試程序

2、測試效果圖

四、源代碼地址

❹ log4j2怎樣配置才能在控制台列印mybatis的sql日誌

您好:我的log4j.properties在src目正帶正錄下如下: ### logger 的配置 ### #配置行鄭根 logger 定義根 logger 配置項。其語法為:級別,輸入終端1,輸出終端舉悔2 log4j.rootLogger=INFO,stdout ### direct log messages to stdout

❺ Log4j2簡介和非同步日誌梳理

log4j2是log4j 1.x 的升級版,參考了logback的一些優秀的設計,並且修復了一些問題,因此帶來了一些重大的提升,主要有:

之前看官方文檔摘抄了一些概念,這里懶得翻譯了,使用log4j的都應該清楚,這里只是mark下。

log4j2最大的特點就是非同步日誌,其性能的提升主要也是從非同步日誌中受益,我們來看看如何使用log4j2的非同步日誌。

Log4j2提供了兩種實現日誌的方式,一個是通過AsyncAppender,一個是通過AsyncLogger,分別對應前面我們說的Appender組件和Logger組件。注意這是兩種不同的實現方式,在設計和源碼上都是不同的體現。

AsyncAppender是通過引用別的Appender來實現的,當有日誌事件到達時,會開啟另外一個線程來處理它們。需要注意的是,如果在Appender的時候出現異常,對應用來說是無法感知的。 AsyncAppender應該在它引用的Appender之後配置,默認使用 java.util.concurrent.ArrayBlockingQueue實現而不需要其它外部的類庫。 當使用此Appender的時候,在多線程的環櫻慎境下需要注意,阻塞隊列容易受到鎖爭用的影響,這可能會對性能產生影響。這時候,我們應該答拆考慮使用無所的非同步記錄器(AsyncLogger)。

AsyncAppender有一些配置項,如下:

除此之外還有一些其他的細節,如果感興趣可以參考官網文檔,這里就不一一列舉了。

AsyncLogger才是log4j2 的重頭戲,也是官方推薦的非同步方式。它可以使得調用Logger.log返回的更快。你可以有兩種選擇:全局非同步和混合非同步。

全局非同步

配置文件不用動:

在系統初始化的時候,增加全局參數配置:

你可以在你第一次獲取Logger之前設置,也可以載入JVM啟動參數里,類似

混合非同步

混合非同步只需要修改配置文件即可:

在上面示例的配置中,root logger就是同步的,但是com.foo.Bar的logger就是異清頌棗步的。

在使用非同步日誌的時候需要注意一些事項,如下:

4、如果不是確實需要,不要列印location信息,比如HTML的location,或者pattern模式里的%C or $class, %F or %file, %l or %location, %L or %line, %M or %method, 等,因為Log4j需要在列印日誌的時候做一次棧的快照才能獲取這些信息,這對於性能來說是個極大的損耗。

關於性能測試,大家可以直奔官網,哪裡有很詳細的數據,這里給個圖:

雖然我測下來,在immediateFlush設置為false的情況下,同步非同步差不了多少,但可能是我的測試條件不符合官方的,從設計和原理上來說,非同步日誌,無疑是個最優的選擇。

總的來說,看了一遍log4j的官網文檔,對日誌系統有了個比較全面的了解,以前只是配置來改改,沒關注過很多細節,這次算是掃盲了一次。文章也只是做了個介紹,在實際使用中,還是要細細研究下配置。

另外,個人覺得非同步模式無非就是在原來同步寫盤的前提下,增加消息隊列作為緩存,或者交個另一個線程去做,這理論上除了帶來一些額外的,較小的cpu和內存的開銷,應該會在高流量的時候帶來不小的性能提升,對比下來,log4j2無疑是當下最值得使用的日誌組件來,且可以使用其非同步模式。

當然了,也不能說非同步就一定好,如果日誌的流量不是特別大,磁碟性能又跟得上,沒有必要一定使用非同步日誌。

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

配置跡橋畝log4j2日誌記錄至資料庫


1、建立用於保存日誌的數姿森據庫表:

CREATETABLE`sys_log`(
消沒`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;

2、配置 databaseAppender :

<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>

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

DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();


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

<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>

❼ log4j2 非同步日誌原理及配置

log4j2通過講打日誌流程中的部分階段進行非同步化,使得日好簡志列印性能得到了很大的提升。
要想了解log4j如果實現非同步日誌,進而提升性能,就需要先了解日誌列印的基本過程。

在log4j中,有兩個重要的概念,分別是 Logger 、 Appender 。Logger是負責具體的生產日誌數據,我們平時的Logger.info(...)就是生產日誌數據的過程。Appender則是負責講數據搬運到目的地,如console、文件、hive、網路設備等等。

而log42實現非同步日誌,主要包括以下兩種方式:

非同步Logger通過使用LMAX Disruptor環形隊列和單獨的處理線程,避免了鎖的競爭,從而實現更高的吞吐量。隊列大小默認4096,通過以下參數,可以開啟非同步日誌。

非同步Appender則是使用了java中的ArrayBlockingQueue,默認隊列大小1024。log4j2官方測試,asyncLogger相比asyncAppender有更好的友旦褲表現。

是否可以同時使用AsyncLogger + AsyncAppender?同時使用是否有更好表現?
據stackoverflow上回答,AsyncLogger是更新的非同步機制,有更好的表現。AsyncAppender是之前的非同步機制。同時使用也不會遲扒增加性能表現。見
https://stackoverflow.com/questions/24177601/difference-between-asynclogger-and-asyncappender-in-log4j2

https://logging.apache.org/log4j/2.x/manual/async.html
https://www.cnblogs.com/yeyang/p/7944906.html
https://bryantchang.github.io/2019/01/15/log4j2-asyncLogger/

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

配置log4j2日誌記錄至資料庫


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

CREATETABLE`sys_log`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`level`varchar(32)NOTNULL,
`logger`varchar(100)NOTNULL,
`message`varchar(1000)DEFAULTNULL,
`exception`varchar(10000)DEFAULTNULL,
`date_add`datetimeNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=19DEFAULTCHARSET=utf8mb4;

2、配置 databaseAppender :

<JDBCname="databaseAppender"tableName="sys_log">
<ConnectionFactoryclass="cc.s2m.web.s2mBlog.util.StaticProp"method="getDatabaseConnection"/>
<Columnname="date_add"isEventTimestamp="true"/>
<Columnname="level"pattern="%level"/>
<Columnname="logger"pattern="%logger"/>
<Columnname="message"pattern="%message"/>
<Columnname="exception"pattern="%ex{full}"/>
</JDBC>

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

DriverManagerDataSourceds=newDriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");
ds.setUsername("root");
ds.setPassword("123456");
returnds.getConnection();


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

<loggername="SYSLOG"level="INFO"additivity="false">
<appender-refref="databaseAppender"/>
</logger>