10

Socket Appender の仕組みがわかりません。ログ イベントが特定のポートに送信されることはわかっています。次に、ログをコンソールに出力したり、ファイルに入れたりできます。

私の質問は、ログの送信方法に関するものです。たとえば、1 つのキューはありますか? 同期ですか、非同期ですか。それを使用すると、プログラムが遅くなる可能性がありますか?

ここでいくつかの情報を見つけましたが、明確ではありません。

4

3 に答える 3

12

SocketAppender のドキュメントから

ロギング イベントは、ネイティブ TCP 実装によって自動的にバッファリングされます。これは、サーバーへのリンクが低速であるが、クライアントによる (ログ) イベント生成の速度よりも高速である場合、クライアントは低速のネットワーク接続の影響を受けないことを意味します。ただし、ネットワーク接続がイベント生成の速度より遅い場合、クライアントはネットワーク速度でしか進行できません。特に、サーバーへのネットワーク リンクがダウンしている場合、クライアントはブロックされます。

一方、ネットワーク リンクはアップしているが、サーバーがダウンしている場合、クライアントはログ要求を行うときにブロックされませんが、ログ イベントはサーバーが利用できないために失われます。

アペンダーは TCP プロトコルを使用するため、ログ イベントは「一種の同期」であると言えます。

基本的に、アペンダーは TCP を使用して最初のログ イベントをサーバーに送信します。ただし、ネットワーク待機時間が非常に長く、2 番目のイベントが生成されるまでにメッセージがまだ送信されていない場合、2 番目のログ イベントは、最初のイベントが消費されるまで待機する (したがってブロックする) 必要があります。そうです、ネットワークがログイベントを渡すよりも速くアプリがログイベントを生成すると、アプリケーションの速度が低下します。

@Akhil と @Nikita が述べたように、アプリケーションのパフォーマンスがネットワーク遅延の影響を受けないようにする場合は、JMSAppender または AsyncAppender の方が適しています。

于 2012-08-06T10:08:47.123 に答える
4

Socket Appenderは、ログをシリアル化されたObectとしてSocketNodeまたはログサーバーに送信します。アペンダでは、reconnectionDelayが設定されたコネクタスレッドが接続の整合性をチェックし、接続が初期化または切断されていない場合はすべてのログをダンプします。したがって、アプリケーションフローがブロックされることはありません。JVMを介してログ情報を送信する際により優れたJMS機能が必要な場合は、 JMSAppenderを試してください。

  1. Log4j JMSアペンダーを使用して、ログメッセージをJMSブローカーに送信できます。イベントはシリアル化され、JMSメッセージタイプObjectMessageとして送信されます。

サンプルプログラムはこちらから入手できます。

于 2012-08-06T09:56:46.530 に答える
2

同期のようです(ソースを確認しました)が、間違っている可能性があります。AsyncAppenderを使用して非同期にすることができます。これを参照してください。

于 2012-08-06T10:01:23.167 に答える