[解決済み] loggerはprivate staticであるべきか、そうでないのか
2022-11-01 15:19:48
質問
loggerはstaticで宣言すべきでしょうか?通常、ロガーに対して2種類の宣言があるのを見たことがあります。
protected Log log = new Log4JLogger(aClass.class);
または
private static Log log = new Log4JLogger(aClass.class);
どちらを使うべきですか? 両者の長所と短所は何ですか?
どのように解決するのですか?
非静的形式の利点は、正しいクラス名が使われるかどうか心配することなく、以下のように(抽象)基底クラスで宣言できることです。
protected Log log = new Log4JLogger(getClass());
しかし、その欠点は明らかに、クラスのインスタンスごとに全く新しいロガーインスタンスが作成されることです。これはそれ自体高価ではないかもしれませんが、かなりのオーバーヘッドを追加します。これを避けたい場合は
static
という形式を使うのがいいでしょう。しかし、その欠点は、個々のクラスでそれを宣言しなければならないことと、 ロガーの構築時に正しいクラス名を使用するようにすべてのクラスで気をつけなければならないことです。
getClass()
は静的なコンテキストでは使用できないからです。しかし、一般的なIDEでは、このためのオートコンプリートテンプレートを作成することができます。例えば
logger
+
ctrl+space
.
一方、順番にすでにインスタンス化されたロガーをキャッシュするかもしれないファクトリーによってロガーを得るならば、非静的なフォームを使うことは、それほどオーバーヘッドを追加しません。例えば、Log4jは
LogManager
があります。
protected Log log = LogManager.getLogger(getClass());
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
テストが空であるかどうかを判断するためのオプションの処理
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み】「static final Logger」は大文字で宣言する必要がありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java の switch case 文で必要な定数式の問題の解決法
-
プロジェクトの依存関係を解決できない。
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
java send https request prompt java.security.cert.について。
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
アクセス制限の解決方法: ---- in Java
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題
-
[解決済み] なぜロガーは static final と宣言するのですか?