エンタープライズJavaアプリケーションのログ記録の改善– CrunchifyBetterLog4jLogging.java
公開: 2019-08-29
ロガー機能を使用する必要があるJavaアプリケーションを開発している場合、ロガーユーティリティを拡張する方法はいくつかあります。
ロギングを本番プログラムに残すことができるようにするために、Java logger APIは、ロギングを可能な限り安価にするように設計されています。 コードが必要なときにきめ細かいロギングを生成できるようにするが、通常の本番環境でのアプリケーションの速度を低下させないように、APIは、生成されるログメッセージを動的に変更するメカニズムを提供し、通常の操作中にロギングコードの影響を最小限に抑えます。
それでは、全体的な本番ログの品質を向上させる簡単なLoggerUtilityの作成を始めましょう。
Log4jを最新バージョンに更新します
CVE-2021-44228:Apache Log4j2 <= 2.14.1構成、ログメッセージ、およびパラメーターで使用されるJNDI機能は、攻撃者が制御するLDAPおよびその他のJNDI関連のエンドポイントから保護しません。
log4j 2.16.0以降、この動作はデフォルトで無効になっています。
ステップ1:
ファイルCrunchifyBetterLog4jLogging.java
作成します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
package com . crunchify . tutorial ; import org . apache . log4j . Logger ; /** * @author Crunchify.com * */ public class CrunchifyBetterLog4jLogging { private static final String Crunchify_FLAG_DEBUG = " ---------- " ; private static final String Crunchify_FLAG_WARN = " ^^^^^^^^^^ " ; private static final String Crunchify_FLAG_INFO = " ********** " ; private static final String Crunchify_FLAG_ERROR = " ########## " ; private static final String Crunchify_FLAG_FATAL = " $$$$$ " ; // Debug Level public static void debug ( Logger logger , String message ) { logger . debug ( Crunchify_FLAG_DEBUG + message + Crunchify_FLAG_DEBUG ) ; } // Warning Level public static void warn ( Logger logger , String message ) { logger . warn ( Crunchify_FLAG_WARN + message + Crunchify_FLAG_WARN ) ; } // Info Level public static void info ( Logger logger , String message ) { logger . info ( Crunchify_FLAG_INFO + message + Crunchify_FLAG_INFO ) ; } // Error Level public static void error ( Logger Logger , String message ) { Logger . error ( Crunchify_FLAG_ERROR + message + Crunchify_FLAG_ERROR ) ; } // Fatal Level public static void fatal ( Logger Logger , String message ) { Logger . fatal ( Crunchify_FLAG_FATAL + message + Crunchify_FLAG_FATAL ) ; } } |
基本的に私たちが行っているのは、Javaプログラムでlog.fatal
log.info
log.error
と言うと、上記のようにコードが自動的に特殊文字を追加することです。
ステップ2
テストケース(サンプルJavaプログラム)– CrunchifyBetterLog4jLoggingTest.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package com . crunchify . tutorial ; import org . apache . log4j . Logger ; public class CrunchifyBetterLog4jLoggingTest { private static Logger logger = Logger . getLogger ( CrunchifyBetterLog4jLoggingTest . class ) ; public static void main ( String [ ] args ) { int a = 20 ; int b = 30 ; int c = 3 ; int d = 4 ; CrunchifyBetterLog4jLoggingTest . SwapVairablesMethod1 ( a , b ) ; CrunchifyBetterLog4jLoggingTest . SwapVairablesMethod2 ( c , d ) ; } public static void SwapVairablesMethod1 ( int a , int b ) { CrunchifyBetterLog4jLogging . debug ( logger , "value of a and b before swapping, a: " + a + " b: " + b ) ; // swapping value of two numbers without using temp variable a = a + b ; // now a is 50 and b is 20 b = a - b ; // now a is 50 but b is 20 (original value of a) a = a - b ; // now a is 30 and b is 20, numbers are swapped CrunchifyBetterLog4jLogging . warn ( logger , "Result Method1 => a: " + a + " b: " + b ) ; } public static void SwapVairablesMethod2 ( int c , int d ) { CrunchifyBetterLog4jLogging . info ( logger , "value of c and d before swapping, c: " + c + " d: " + d ) ; // swapping value of two numbers without using temp variable using // multiplication and division c = c * d ; d = c / d ; c = c / d ; CrunchifyBetterLog4jLogging . error ( logger , "Result Method2 => c: " + c + " d: " + d ) ; } } |
ここでは、さまざまなタイプのログ結果を出力しています。

結果:
1 2 3 4 |
2014 - 06 - 21 00 : 23 : 19 , 463 DEBUG [ CrunchifyBetterLog4jLoggingTest ] @ @ @ @ @ @ @ @ @ @ value of a and b before swapping , a : 20 b : 30 @ @ @ @ @ @ @ @ @ @ 2014 - 06 - 21 00 : 23 : 19 , 464 WARN [ CrunchifyBetterLog4jLoggingTest ] ^^^^^^^^^^ Result Method1 = > a : 30 b : 20 ^^^^^^^^^^ 2014 - 06 - 21 00 : 23 : 19 , 464 INFO [ CrunchifyBetterLog4jLoggingTest ] ********** value of c and d before swapping , c : 3 d : 4 ********** 2014 - 06 - 21 00 : 23 : 19 , 464 ERROR [ CrunchifyBetterLog4jLoggingTest ] ########## Result Method2 => c: 4 d: 3 ########## |