Log 4 j 2.0の開発における高度な使用の詳細-SocketAppenderのリモート出力(5)


Log 4 j 2のAppendersは、最も基本的なローカルファイルへの出力、リモートホストへの出力、
ファイルをカプセル化、注入し、ログファイルの時点、ファイルサイズなどの条件で自動的にカプセル化することもできます.
たとえば、いくつかの異なるソースのログを集約するには、FlumeAppenderを使用します.LogEventに情報を注ぎ込みたいのですが、
RewriteAppenderを使用できます.設定した時間間隔で自動的にログ情報を封入するには、RollingFileAppenderを使用します.
(新しいログファイルを一定時間ごとに自動的に保存し、タイムスタンプなどの指定されたフォーマットで名前を付けます).ERRORまたはFATALのセキュリティレベルを持つLogEventが生成されると、
メンテナンススタッフにメールを送信するにはSMTPAppenderを使用します.ログ情報をリモートホストに書き込む場合は、SocketAppenderを使用します.RFC 5424の形式でリモートホストにログ情報を送信することが望ましい、
SyslogAppenderなどを使用できます.
SocketAppenderはlog eventを1つのリモートサーバ(サーバ名とポート番号を指定する必要がある)に出力し、データは任意の指定されたフォーマットでTCPまたはUDPプロトコルを介して送信することができる.SocketAppenderで重要なパラメータは、(1)host,String、サーバのホスト名を指定することである.(必須)(2)immediateFlush,boolean,直ちにflushするか,一定サイズにキャッシュされるのを待ってflushにいるか.(3)layout,Layout,log event出力のフォーマット.(4)port,integer,リモートサーバ堅牢log eventのアプリケーションのポート番号.(5)protocol,String,log eventの送信に使用するプロトコル,「TCP」または「UDP」. (6)reconnectionDelay,integer,接続が切断された場合の遅延待ちms数.7,7 name,String,Appenderの名前.⑻protocol,String,通信プロトコルデフォルトTCP.オプション値「TCP」(default)、「SSL」or「UDP」.(9)SSL,SslConfiguration,鍵リポジトリと信頼リポジトリの構成を含む.10-10 filter、Filter、フィルタは、イベントがこのAppenderによって決定されるべきであることを決定します.1つ以上のフィルタは、1つのComponentFilterを使用することができます.⑾immediateFail,boolean,trueに設定すると、ログイベントは再接続の試行を待たず、失敗したソケットがすぐに使用できない場合があります.⑿immediateFlush,boolean、この値が設定されている場合、デフォルトでは、各書き込みはフラッシュされます.これにより、ディスクに書き込まれたデータが保証されますが、パフォーマンスに影響を与える可能性があります.⒀layout,Layout,LogEvent,レイアウトはフォーマットを使用します.デフォルトはSerializedLayoutです.⒁reconnectionDelay,integer,値が0より大きい場合、1つのエラー後にSocketManagerは指定したミリ秒数後のサーバに再接続しようとします.接続に失敗すると例外が放出されます(ignoreExceptionsが偽に設定されている場合は、アプリケーションによって使用できます).デフォルト値が実際にイベントを追加した場合、異常な内部レコードが発生し、無視されます.偽に設定すると、例外呼び出し者に伝播します.このAppenderFailoverAppenderをパッケージするには、この偽を設定する必要があります.
ログサーバコード(mainメソッド):
package com.herman.log4j2.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {
    public static void main(String[] args) throws IOException {
    	ServerSocket socket = new ServerSocket(5000);
        while (true) {
	        Socket client = socket.accept();
	        Thread t = new Thread(new LogRunner(client));
	        t.start();
        }
	}
}
ログサーバコード(Runnableスレッド):
package com.herman.log4j2.server;

import java.io.IOException;
import java.io.InterruptedIOException;
import java.io.ObjectInputStream;
import java.net.Socket;

public class LogRunner implements Runnable{
	 private ObjectInputStream ois;

     public LogRunner(Socket client) {
         try {
              this.ois = new ObjectInputStream(client.getInputStream());
         } catch (Exception e) {
        	 e.printStackTrace();
         }
     }

	 public void run() {
	     try {
	         while (true) {
	        	 Object obj= ois.readObject();
	             System.out.println(obj.toString());
	         }
	     } catch(java.io.EOFException e) {
	         //              ,   
	     } catch(java.net.SocketException e) {
	     } catch(InterruptedIOException e) {
	    	 Thread.currentThread().interrupt();
	     } catch(IOException e) {
	     } 	catch (Exception e) {
	    	 e.printStackTrace();
	     } finally {
	     }
	 }
}
クライアントxml構成(log 4 j 2.xml):


  
  
  	
    
    	
      
    
    
    
    	
      
    
  
  
  	
    
      
      
    
  
クライアントテストコード:
package com.herman.log4j2.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * @see log4j 2.0            Appender
 * @author Herman.Xiong
 * @date 2014 7 21  14:32:55
 */
public class Test2 {
	/**
	 *        debug,           
	 */
	private static Logger log = LogManager.getLogger(Test2.class);
	public static void main(String[] args) {
		log.trace("trace");
		log.debug("debug");
		log.info("info");
		log.warn("warn");
		log.error("error");
		log.fatal("fatal");
		
		
		log.trace("trace");
		log.debug("debug");
		log.info("info");
		log.warn("warn");
		log.error("error");
		log.fatal("fatal");
		log.exit();
	}
}
出力効果:
Logger=com.herman.log4j2.test.Test2 Level=DEBUG Message=debug
Logger=com.herman.log4j2.test.Test2 Level=INFO Message=info
Logger=com.herman.log4j2.test.Test2 Level=WARN Message=warn
Logger=com.herman.log4j2.test.Test2 Level=ERROR Message=error
Logger=com.herman.log4j2.test.Test2 Level=FATAL Message=fatal
Logger=com.herman.log4j2.test.Test2 Level=DEBUG Message=debug
Logger=com.herman.log4j2.test.Test2 Level=INFO Message=info
Logger=com.herman.log4j2.test.Test2 Level=WARN Message=warn
Logger=com.herman.log4j2.test.Test2 Level=ERROR Message=error
Logger=com.herman.log4j2.test.Test2 Level=FATAL Message=fatal
私の个人のブログに関心を持つことを歓迎します!!!
分からない、疑問や不適切なところがあれば、QQ群:135430763を加えてフィードバックして、一緒に勉強してください.