跳到主要內容

Log4j2 - Hello World!

Introduction

本篇文章主要針對Log4j2設定的基本結構做介紹,讓大家可以快速進入Log4j2的世界。Log4j2的configuration file提供了XML、JSON、YAML與properties設定的方式,為了利於Log4j1轉換到Log4j2的格式銜接,我選擇了properties格式做介紹。

Example

一個Log4j2的設定檔,幾乎都會有以下三個元素,包含全域定義、Appender定義與Logger定義。接下來將會針對這三個元素做基本介紹。

# part1  全域定義
status = warn
name= CommonLogSettingForUnitTests
rootLogger = DEBUG, CONSOLE
 
# part2 Appender定義
appender.console.type = Console
appender.console.name = CONSOLE
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{mm:ss,SSS}|%5p[%t] (%F:%M:%L) %m %n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = ALL
 
# part3 Logger定義
logger.reflections = DEBUG, CONSOLE
logger.reflections.name = org.reflections.Reflections
logger.reflections.additivity = false
 
logger.default = DEBUG, CONSOLE
logger.default.name = org.tonylin.practice
logger.default.additivity = false

全域定義

以本篇範例所提及的項目來說:

status = warn
name= CommonLogSettingForUnitTests
rootLogger = DEBUG, CONSOLE

  • status: 設定log4j本身的事件的level,會以console形式輸出。如果你懷疑log4j設定有問題,可以改這個設定成trace或debug去看問題出在哪,也可以透過設定system properties “log4j2.debug=true”去enable所有log內容。
  • name: configuration file所對應的configuration名稱。這個目前看起來有將設定分在多個檔案的情況才比較有用,可以參考XIncludeCompositeConfiguration
  • rootLogger: 等同於log4j1的log4j.rootLogger,沒有設定logger的預設行為。以我的範例來說,就是希望針對DEBUG level以上的所有情況,去使用CONSOLE appender定義的方式做log。如果要串多組appender,就直接加在CONSOLE後,以逗號區隔。

除了我介紹的三個項目以外,目前我有看到的全域定義還有filterproperties,可用於定義預設log過濾規則與變數定義,有興趣的人可以先自行研究,之後文章有用到我再說明。

Appender定義

Appender定義我認為是log4j設定檔中最複雜的一塊,因為這個完全取決於你:log格式為何、要log在哪裡、log保留形式為何等等,這也是安全性最容易出問題的地方。我先針對範例有提及的元素做說明。

appender.console.type = Console
appender.console.name = CONSOLE
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{mm:ss,SSS}|%5p[%t] (%F:%M:%L) %m %n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = ALL

  • appender.console.type: 這個影響的是要log在哪裡與log保留形式,以範例來說是輸出到Conosle上。也有可能會輸出到file、syslog、smtp、database,取決於你的需求而使用不同的appender type。我有使用到的項目會再整理其它文章內容給大家參考。
  • appender.console.name: Appender的名稱,提供給後續Logger定義做參考使用。
  • appender.console.layout: 這個影響的是log格式,可以參考link去設定你想要的樣子。以這個範例來說,輸出會長這樣子: 47:27,691| INFO[main] (ClassName.java:MetohdName:59) hello world!。
  • appender.console.filter: 這是用來設定此appender需要log的條件,以本篇範例來說,因為設定成ALL,代表要log所有內容。

假如我要設定第二組不同的Console設定的話,範例如下,另外只要在Logger設定中指定CONSOLE2即可:

appender.console2.type = Console
appender.console2.name = CONSOLE2
...

Logger定義

這個就是決定了你哪些東西需要做log與對應的appender為何。以本篇範例來說,總共設定了兩組logger(key以reflections與default區分),兩者差別只在於:

  • logger.reflections: 設定套用在org.reflections.Reflections這個class上。
  • logger.default: 設定套用在org.tonylin.practice這個底下所有的packages。

不滿足以上規則的class或package,就會套用在全域定義中rootLogger的方式。接下來針對範例有提及的元素做說明,用reflections這組為例。

logger.reflections = DEBUG, CONSOLE
logger.reflections.name = org.reflections.Reflections
logger.reflections.additivity = false
 
logger.default = DEBUG, CONSOLE
logger.default.name = org.tonylin.practice
logger.default.additivity = false

  • logger.reflections: 定義log的方式,與rootLogger定義方式相同。
  • logger.reflections.name: 定義logger所對應的package或class。
  • logger.reflections.additivity: 目前我還摸不清它的訊息附加的規則是怎樣執行的,假如你有發現訊息重複log的情況,不妨把它設成false看看。

註: 如果全域定義中有設定ThresholdFilter與對應的level,要注意會以全域定義的為主。

Reference

留言

這個網誌中的熱門文章

PostgreSQL - Unattended installation on windows

Introduction 要將別人軟體包裝到自己軟體中,不可或缺的東西就是Unattended installation。以Unattended installation來說,我們可以選擇透過Installer的silent mode安裝,也可以透過把目標軟體做成portable的版本。本篇文章分享這兩種方法,教導大家如何將PostgreSQL透過Unattended installation方式安裝到目標系統成為service。 Note. 本篇以PostgreSQL 10.7為例。 Install with installer Tips 安裝程式或反安裝程式的參數,除了可以直接上官網搜尋Installation User Guide以外,也可以直接使用help參數查詢: postgresql- 10.7 - 2 -windows-x64.exe --help Windows安裝程式主要有EnterpriseDB與BigSQL兩種。BigSQL版本安裝元件是透過網路下載且支援參數不如EnterpriseDB版本多,以我們需求來說,我們傾向於使用EnterpriseDB版本。接下來分享給大家安裝與反安裝方法。 Installation @ echo off set INSTALL_DIR =C:\postgres10 set INSTALLER =postgresql- 10.7 - 2 -windows-x64.exe   rem options for installation set SSMDB_SERVICE =postgresql- 10 set MODE =--unattendedmodeui none --mode unattended   set DB_PASSWD =--superpassword postgres set DB_PORT =--serverport 5432   set SERVICE_NAME =--servicename % SSMDB_SERVICE %   set PREFIX =--prefix "%INSTALL_DIR%" set DATA_DIR =--datadir "%INSTALL_DIR%\data"   set OPTIONS =

How to install RIDE on Windows?

Introduction 多年沒在Windows上開發RobotFramework,趁著這次整理一下RIDE安裝方法。 目前RIDE最新版本與Python對應版本如下: (3.6 < python <= 3.11) Install current released version (2.0.8.1) with: pip install -U robotframework-ride 安裝Python 直接到Python官網找尋最新的3.11版本,我使用3.11.9: link 。安裝就是一直下一步而已。 安裝wxPython 每次安裝RIDE最困難的都是wxPython。看了一下 官網 描述,我就姑且相信一下: 接著進入下 載頁面 就有安裝教學。基本上就是到Python目錄下的Scripts直接執行以下command: pip install -U wxPython 安裝RIDE 接著就如RIDE官網所說,執行以下command: pip install -U robotframework-ride 啟動RIDE 直接在相同目錄下執行ride就可以啟動了,你也可以直接在桌面建ride連結,加快下次啟動時間。 沒想到這次這麼順利就安裝完成了。因為我是使用java去啟動robot framework,就不特別講要怎麼使用pip安裝robot framework了。

Hello World!

即將要搬家,因此舊網頁內容將慢慢轉移至Blogger。 如果要存取舊網頁,可以使用以下連結: https://wiki.tonylin.idv.tw/dokuwiki/doku.php