日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

010_logback中的SocketAppender

發布時間:2025/4/17 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 010_logback中的SocketAppender 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. SocketAppender被設計為通過序列化ILoggingEvent實例把記錄輸出到遠程實體。被序列化的事件的真實類型是LoggingEventVO, 它實現了ILoggingEvent接口。盡管如此, 就記錄事件而言, 遠程記錄仍然是無損的。在接收和反序列化后, 事件像是從本地產生的一樣被記錄。運行在不同機器上的多個SocketAppender實例可以把各自的記錄輸出到一個格式固定的中央記錄服務器。

2. SocketAppender不關聯layout, 因為它把序列化的事件發送到遠程服務器。SocketAppender運作在TCP層上, TCP層提供可靠、有序、流量控制的端到端的二進制流。因此, 如果遠程服務器可訪問, 則記錄事件最終會到達那里。否則, 如果遠程服務器關機或不可訪問, 那么記錄事件會被拋棄。當遠程服務器恢復可用時, 會透明地繼續傳輸事件。這種透明的重新連接是由一個連接器(connector)線程執行的, 它定時嘗試連接服務器。

3. 記錄事件被本地TCP實現自動地緩沖。這意味著如果服務器連接很慢, 但快于客戶端生成事件的速度, 那么客戶端不會受網絡連接慢的影響。但是如果網絡連接慢于生成事件的速度, 那么客戶端只能按網絡速度執行。特別是在服務器宕機這種極端情況下, 客戶端會被阻塞。

4. 如果連接器線程仍然存在, 即使SocketAppender不再關聯到任何logger, 也不會被垃圾回收。連接器線程只在當與服務器之間沒有連接時存在。為避免這個垃圾回收問題, 你應當顯式地關閉 SocketAppender。會創建/銷毀很多SocketAppender實例的長期運行的程序應當注意這個垃圾回收問題。多數其他程序可以安全地忽略這個問題。如果宿主JVM在SocketAppender關閉之前退出了, 不管 SocketAppender被顯式關閉還是交給垃圾回收, 都有可能在管道(pipe)里剩有一些未被傳輸的數據, 這些數據會丟失。為避免數據丟失, 一般在退出程序之前顯式地調用SocketAppender的close()方法或調用LoggerContext的stop()方法就可以了。

5. SocketAppender的屬性見下表

6. Logback標準發行包含一個簡單的記錄服務器程序"ch.qos.logback.classic.net.SimpleSocketServer", 可以支持多個SocketAppender客戶端。它等待來自SocketAppender客戶端的記錄事件, 接收到事件后, 按照本地服務器的記錄策略進行記錄。

7. 例子

7.1. 新建一個名為ServerSocketAppender的Java項目, 同時添加相關jar包

7.2. 在src目錄下創建logback.xml

<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>log/my.log</file><prudent>true</prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>log/my.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="file" /><appender-ref ref="stdout" /></root></configuration>

7.3. 編輯MyServer.java

package com.zr.server;import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.net.SimpleSocketServer;public class MyServer {public static void main(String[] args) {LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();SimpleSocketServer sss = new SimpleSocketServer(lc, 9999);sss.start();} }

7.4. 新建一個名為SocketAppender的Java項目, 同時添加相關jar包

7.5. 在src目錄下創建logback.xml

<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="socket" class="ch.qos.logback.classic.net.SocketAppender"><remoteHost>127.0.0.1</remoteHost><port>9999</port></appender><root level="debug"><appender-ref ref="socket" /><appender-ref ref="stdout" /></root></configuration>

7.6. 編輯MyClient.java

package com.zr.client;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class MyClient {private static final Logger logger = LoggerFactory.getLogger(MyClient.class);public static void main(String[] args) {for(int i = 0; i < 1000; i++) {logger.debug("客戶端日志: " + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}} }

7.7. 運行MyServer.java

7.8. 運行MyClient.java, 可以多運行幾個客戶端

7.9. 運行的過程中可以更改系統時間, 服務端接收到客戶端的日志信息

8. SimpleSocketServer不是很強大不能打印客戶端的ip和端口信息。

總結

以上是生活随笔為你收集整理的010_logback中的SocketAppender的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。