問題タブ [slf4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
log4j - 抽象クラス/継承のためにslf4j(log4jを使用)ロガーを適切に初期化する方法
私のプロジェクトでは、トップレベルの抽象クラスを持っていますFrameProducer
。このレベルで slf4j ロガーを追加したので、すべての継承クラスがすでにそれを持っています。ここにコード:
と の 2 つの継承クラスもありCameraFrameGrabber
ますGrayscaleFilter
。それでも、メソッドfireEvent()
が呼び出されているとき、CameraFrameGrabber
またはGrayscaleFilter
メッセージがFrameProducer
レベルでログに記録されているとき。わかりやすくするために、ログを次に示します。
FrameProducer
クラス階層の最も特殊化されたレベルですべてがログに記録されるようにロガーを初期化することは可能ですか?
助けてくれてありがとう。
編集:私の log4j.properties は次のようになります。
java - 毎回 LoggerFactory.getLogger(...) を呼び出すことが推奨されないのはなぜですか?
SFL4J ロギングの推奨パターンは次のとおりであることを指摘する、大量の投稿や文書 (このサイトおよび他の場所) を読みました。
私の上司は、ラッパーを使用してログ呼び出しをインターセプトし、すべてのクラスでロガーを宣言する定型コードを避けることを好みます。
単純に次のように使用します。
ログを記録するたびにロガーをインスタンス化するのは多少コストがかかると思いますが、その仮定を裏付けるドキュメントを見つけることができませんでした。それに加えて、彼は確かにフレームワーク (LogBack または Log4J をまだ決定中です) がロガーを「キャッシュ」し、いずれにせよサーバーが容量をはるかに下回る状態で実行されているため、問題ではないと述べています。
このアプローチの潜在的な問題を指摘する助けはありますか?
java - Jettyのログを印刷する方法
私のプロジェクトはWicket+Spring + JPA/Hibernateで実行されます。次のコマンドを使用して実行すると、次のようになります。
mvn jetty:run
コードで作成したログをjettyで印刷したいのですが。たとえば、次のDAOを実装しました。
Jettyにこの情報をコマンドラインウィンドウにリアルタイムで出力させるにはどうすればよいですか?
pom.xmlには、次の依存関係があります。
log4j - SLF4j/log4j を使用してログを .log ファイルに保存する
私は SLF4J を使用しており、要件に従って、ログを .log ファイルに保存する必要があります。しかし、プログラムを実行すると、ログはログ ファイルに書き込まれません。
クラス :
log4j.properties
コンソールに情報、警告、エラーが表示されますが、デバッグ値は表示されません..!!
ログをcheckLog.logファイルに保存するのを手伝ってくれる人はいますか??
log4j - プロジェクト固有のログ情報をログファイルにロードする
私はEclipseを使用しており、Webプロジェクトを作成しています。また、ログファイルにログを保存するためにSLF4Jを使用しています。
log4j.properties
ファイルをフォルダに入れていWEB-INF/classes
ます。
ログインページにアクセスすると、関連するすべてのログとデバッグステートメントログがログファイルに読み込まれますが、特定のログ(つまり、プロジェクト固有のログ)を他のログではなくログファイルに読み込む必要があります。
ログファイルで私は見ることができます:
特定のプロジェクト関連のログをログファイルに保存する方法を見つけるのを手伝ってくれる人はいますか?
spring - 注入されるプロトタイプ Bean で親 Bean を取得する
次のような Bean と SubBean が必要です。
私が達成したいトリックは、SubBean が注入された Bean への参照を自動的に取得することです。サブビーンのスコープはプロトタイプであるため、サブビーンの注入を希望するすべての親に新しいインスタンスとして注入されます。
私の大きなアイデアは、このパターンを利用して、通常の Bean に注入できる LoggerBean を作成することです。サブビーンは、SLF4J ロガーと同じように機能する必要があります。
では、これを機能させる魔法を知っている人はいますか? :)
編集:カスタム BeanPostProcessor でこれを行うソリューションを見つけました:
インターフェイスは次のとおりです。
そして、ここでそれを使用する Bean:
ここでは、完全に機能する通常の Bean を使用したテストを示します。
ただし、@Configurable を介して注入された依存関係を取得する通常のクラスで同じものを使用すると、テストは失敗します。
だから、これは私に別の質問をさせたようです:なぜ私のカスタム BeanPostProcessor は @Configurable クラスで実行されないのですか? 結局、AspectJに頼らなければならないかもしれません...
編集:ステータスを更新するだけです。これはオーバーエンジニアリングであるため、結局これを実装しませんでした...
logging - Jetty6 slf4jロギング-カスタムログフォーマッタを機能させる方法は?
私はjetty6をSLF4JとJavaロギングで使用しており、カスタムログフォーマッターを追加しようとしていますが、何を試しても機能しないようです。
私は次のようなフォーマッターを持っています:
これをjettyロギングのデフォルトとして使用したいので、${jetty.home}/resources/logging.propertiesファイルを作成しました。
DeadSimpleFormatterクラスを含むjarファイルlogging.jarを作成します。このjarファイルを${jetty.home}/ lib/extに入れました。
私は桟橋を始めます:
作成中の出力ファイルを見ることができます。これは、プロパティファイルで定義されている制限とカウントのルールに従います。しかし、それは私のフォーマッターを使用しません-それはデフォルトのXmlFormatterに戻ります。stdoutまたはstderrからのエラーは表示されません。
logging.propertiesファイルを変更して、フォーマッターを次のように設定すると、次のようになります。
...その後は機能します-ログファイルは通常のSimpleFormatterを使用して書き出されます。したがって、私のプロパティは問題なく、slfjjarなどはすべて正しいと確信しています。Jettyが私のDeadSimpleFormatterを気に入らないというだけです。
何もないので-文字通り!--DeadSimpleFormatterでは、これはクラスの読み込みの問題である可能性があると思います。次のようにjarファイルを明示的に追加してみました。
...しかし喜びはありません。
私はメインメソッドをDeadSimpleFormatterに入れ、jarを実行できることを確認しました。
...これは機能するので、私の瓶は大丈夫だと確信しています。
ここで何が起こっているのか誰かが知っていますか?私は考えられるすべての組み合わせを試しました。
ありがとう、アラステア
java - Log4j を LogBack に置き換える際の問題、log4j-over-slf4j.jar の欠点
そのため、いくつかのサービスを移植して、log4j で Logback を使用し、log4j-over-slf4j jar を使用して、従来の依存関係のために log4j を偽装しています。唯一の問題は、log4j-over-slf4j が log4j のクラスの多くを実装していないことです。そのため、依存する jar から例外が見つからないクラスがいくつか見られます。人々はこれをどのように回避しましたか?log4j-over-slf4j jar の代わりに nlog4j をクラスパスに入れるだけで十分ですか? この最後のアイデアはまだテストしていませんが、明日実行する予定です。
参照:
logging - log4j (または他の Java ロガー) アペンダーは、リクエスト コンテキスト オブジェクトを受け入れたり、アクセスしたりできますか?
現在、Restlet を使用して Web サービスを作成しており、log4j の前に slf4j でログを記録しています。現在、ファイルにログを記録するための標準の log4j アペンダーを用意しています。私がやろうとしていたことは、カスタム Appender を使用して、HTTP 応答にログ出力を含めることです。
私が見ている問題は、デフォルトではアペンダーが作成中のリクエストのコンテキストにアクセスできないことです。理論的には、非同期アペンダーが実行される前にリクエストが終了する可能性があるため、これは理にかなっています。おそらく Appender を同期させ、ログ呼び出しで Response オブジェクトを渡すことによって、これが可能かどうかについてはまだ興味があります。log4j がこれをサポートする方法が見つかりません。logback のような別のフレームワークはありますか? パフォーマンスへの影響があるため、必ずしもこの方法を最終的に使用するわけではありませんが、それでも興味があります。
参考までに、私の現在の回避策は、応答にエントリを追加し、標準のログ記録のために slf4j メソッドを呼び出すカスタム ログ メソッドです。これの欠点は、カスタム メソッドを使用する必要があることです。また、自分が制御するコードのログ エントリしか取得しません (使用しているライブラリは、Appenders のみを使用しており、Response にログが記録されません)。