Log4j 2.0在具體解釋發展先進的使用—SocketAppender遠程輸出(五歲如下兒童)

Log4j2的Appenders充分考慮輸出日誌事件、包裝和過濾能夠被轉發,它包含的主要輸出到本地文件、輸出到遠程主機,
文件包、注射。並且,根據該日誌文件的時間點、本身主動文件大小的儲存條件。
例如,要記錄多個不一樣來源聚集,您可使用FlumeAppender。想要在LogEvent中注入信息。
可以用RewriteAppender。想要讓系統依照設定的時間間隔本身主動封存日誌信息。可以用RollingFileAppender
(每隔必定時間本身主動保存一份新增的日誌文件,並依照時間戳等指定格式命名);當產生安全級別達ERROR或FATAL的LogEvent時。
給維護人員發送郵件可用SMTPAppender。但願將日誌信息寫到遠程主機的,可用SocketAppender;但願能夠依照RFC5424格式向遠程主機發送日誌信息,

可用SyslogAppender等等。html

SocketAppender
將log event輸出到一個遠程server上(需指定server名和port號),數據可以以隨意指定的格式經由TCP或UDP協議發送。java


SocketAppender中比較重要的參數有:
⑴ host,String。指定server的主機名。(必需)
⑵ immediateFlush,boolean,是否立刻flush。仍是等待緩存到必定大小後在flush。apache


⑶ layout。Layout,log event輸出的格式。
⑷ port。integer,遠程server堅挺log event的應用的端口號。
⑸ protocol,String,發送log event所使用的協議。"TCP" 或"UDP"。
⑹ reconnectionDelay,integer,當鏈接斷開時,延遲等待的ms數。
⑺ name,String 。Appender的名稱。緩存


⑻ protocol,String,通信協議 默認TCP。安全

可選值 "TCP" (default), "SSL" or "UDP".
⑼ SSL。SslConfiguration,包括密鑰存儲庫和信任存儲庫的配置.
⑽ filter,Filter。一個過濾器來肯定事件應該由這個Appender。 不止一個過濾器 可以經過使用一個CompositeFilter。服務器


⑾ immediateFail。boolean,設置爲true時,日誌事件不會等待嘗試又一次鏈接,將立刻假設失敗 套接字是不可用的。
⑿ immediateFlush,boolean。 當該值設置成真時,默認狀況下,每個寫將沖洗。socket

這將保證寫的數據 到磁盤,但可能會影響性能。佈局


⒀ layout,Layout,LogEvent ,佈局使用格式。 缺省值是SerializedLayout。性能


⒁ reconnectionDelay。integer ,假設設置爲值大於0,一個錯誤後SocketManager將嘗試又一次鏈接 在指定的毫秒數後的server。 假設鏈接失敗 將拋出一個異常(可以被應用程序假設ignoreExceptions是 設置爲假)。
⒂ ignoreExceptions。boolean,默認值是真正的加入事件時,遇到了引發異常 內部記錄,而後忽略。 當設置爲假將傳播到異常 調用者。學習

你必須設置這個假當包裝這個AppenderFailoverAppender。

日誌server代碼(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配置(log4j2.xml):
<?

xml version="1.0" encoding="UTF-8"?> <Configuration> <!-- Appenders 輸出目的地 --> <Appenders> <!-- 配置日誌輸出文件名稱字 追加讀寫 host地址 端口 --> <Socket name="A1" host="localHost" port="5000"> <!-- 輸出格式 序列布局--> <SerializedLayout/> </Socket> <!-- 控制檯輸出 --> <Console name="STDOUT" target="SYSTEM_OUT"> <!-- 輸出格式 佈局--> <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/> </Console> </Appenders> <Loggers> <!-- debug級別 --> <Root level="debug"> <AppenderRef ref="A1"/> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>

客戶端測試代碼:

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   進行反饋,共同窗習!

相關文章
相關標籤/搜索