日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

log4j2到oracle,Log4j2进阶使用(更多高级特性)

發(fā)布時間:2024/7/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 log4j2到oracle,Log4j2进阶使用(更多高级特性) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

# 1.高級進階說明

本文介紹Log4j2高級進階使用,

基于[Log4j2進階使用(按大小時間備份日志)](https://www.jianshu.com/p/c7ae523f6e82),

介紹更多的高級特性,

本文基于上文給出的完整log4j2.xml,

修改對應(yīng)的配置項,

演示高級特性的使用。

基本使用請參考[Log4j2基本使用入門](https://www.jianshu.com/p/a344409cf08a)。

# 2.調(diào)整日志備份時間

按時間備份日志文件的時候,

可以指定modulate為true:

```

```

表示對備份日志的生成時間糾偏,

糾偏以零點為基準(zhǔn)進行,

即日志時間將以0點為邊界進行偏移計算。

如果每4小時備份一次日志,

假設(shè)當(dāng)前時間是凌晨3點,

那么下次生成日志時間是4點,8點,12點等等。

如果每10分鐘備份一次日志,

假設(shè)當(dāng)前時間是09:58,

那么下次生成日志時間是10:00, 10:10, 10:20等等。

具體效果就是不管當(dāng)前的運行時間,

生成的備份日志時間是可以預(yù)期的,

有規(guī)律的,便于查看的。

運行測試程序效果如下:

```

logs/:

10月 10 10:30 2019-10/

10月 10 10:36 test.log

logs/2019-10:

10月 10 09:59 test-2019-10-10-09-59-1.log

10月 10 10:09 test-2019-10-10-10-09-1.log

10月 10 10:19 test-2019-10-10-10-19-1.log

```

可以看到在09:59, 10:09, 10:19等時間生成了備份日志。

發(fā)現(xiàn)實際文件時間和預(yù)期的時間都差了1分鐘,

查看Log4j2源碼:

```java

org.apache.logging.log4j.core.appender.rolling.PatternProcessor.getNextTime(long,

int, boolean)

cal.set(Calendar.MINUTE,

currentCal.get(Calendar.MINUTE));

if (frequency == RolloverFrequency.EVERY_MINUTE) {

increment(cal,

Calendar.MINUTE, increment, modulus);

nextTime =

cal.getTimeInMillis();

cal.add(Calendar.MINUTE,

-1);

nextFileTime =

cal.getTimeInMillis();

return

debugGetNextTime(nextTime);

}

```

可以看到nextTime和nextFileTime確實差了1分鐘,

也就是備份日志文件的時間比預(yù)期時間差1個單位,

因此如果每4小時備份一次日志,

那么下次生成的日志文件時間是3點,7點,11點等等,

實際比預(yù)期都差了1個小時。

按照時間備份日志文件,

時間單位可以是年,月,日,小時,分鐘,秒,毫秒,星期,

生成的備份文件就是上一個時間單位的時間,

比如備份的就是去年,上個月,昨天的日志等等,

因此實際減去1個時間單位是合理的。

# 3.壓縮日志

通過配置filePattern文件的后綴名,

可以實現(xiàn)在備份日志時對日志文件進行壓縮。

支持的文件壓縮格式:.gz, .zip, .bz2, .deflate, .pack200,.xz。

生成的歸檔文件將使用匹配后綴的壓縮方案進行壓縮。

```

filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd-HH}-%i.log.zip">

```

上面的配置中filePattern以.zip結(jié)尾,

表示備份文件壓縮為zip格式。

運行測試程序效果如下:

```

logs/:

2019-10/

test.log

logs/2019-10:

test-2019-10-10-15-03-1.log.zip

test-2019-10-10-15-04-1.log.zip

test-2019-10-10-15-05-1.log.zip

```

可以看到備份的日志文件都壓縮為zip格式,

而且文件占用硬盤空間更少了。

同時DefaultRolloverStrategy支持配置日志壓縮級別,

設(shè)置compressionLevel屬性,范圍0-9,

壓縮效果依次增大,

0不壓縮,1壓縮速度最快,9壓縮率最好,

但是只對于壓縮文件類型有效,

目前Log4j2只實現(xiàn)了zip壓縮文件支持compressionLevel。

```

```

如果不填寫壓縮級別,默認(rèn)是DEFAULT_COMPRESSION(-1)。

查看Log4j2壓縮代碼實現(xiàn),

調(diào)用的是jdk提供的zip壓縮:

```

public void setLevel(int level) {

def.setLevel(level);

}

```

下面的配置表示備份文件壓縮為gz格式:

```

filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd-HH}-%i.log.gz"

```

# 4.敏感日志設(shè)置

Layout支持replace功能,

可以通過正則表達(dá)式查找%msg的內(nèi)容,

并且替換為想要輸出的內(nèi)容,

可以實現(xiàn)把敏感日志替換為其他字符。

下面replace把msg中的error全部替換為*****:

```

%replace{%msg}{error}{*****}

```

需要注意的這里replace只支持正常打印的內(nèi)容,

不支持exception(即catch捕獲的error會直接輸出)。

log4j2.xml配置參考:

```

```

修改前打印日志:

```

2019-10-23 16:20:23.085 [main] ERROR [18] - error level

log

2019-10-23 16:20:23.085 [main] FATAL [19] - fatal level

log

```

修改后打印日志:

```

2019-10-23 16:20:25.073 [main] ERROR [18] - ***** level

log

2019-10-23 16:20:25.083 [main] FATAL [19] - fatal level

log

```

# 5.參考文章

[Log4j2基本使用入門](https://www.jianshu.com/p/a344409cf08a)

[Log4j2進階使用(按大小時間備份日志)](https://www.jianshu.com/p/c7ae523f6e82)

[Log4j2進階使用(Pattern

Layout詳細(xì)設(shè)置)](https://www.jianshu.com/p/37ef7bc6d6eb)

[Log4j2完整XML參考(詳細(xì)注釋說明)](https://www.jianshu.com/p/3427a76134d6)

總結(jié)

以上是生活随笔為你收集整理的log4j2到oracle,Log4j2进阶使用(更多高级特性)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。