簡體   English   中英

如何接收slf4j日志記錄仍然不依賴於記錄后端?

[英]How to receive slf4j logging and still do not depend on logging backend?

我使用SLF4J作為日志記錄,讓用戶決定記錄的位置和內容。 現在發生崩潰,我想將一個文件發送到包含調試信息的服務器 - 這基本上就是一個日志文件。 既然我們已經將所有日志語句分散在代碼中,為什么不使用它們呢?

所以基本上,我想通過SLF4J以編程方式創建一個日志文件,對於仍然可以插入自己的日志后端和配置的用戶來說是透明的。

我的第一個想法是實現org.slf4j.impl.StaticLoggerBinder ,提供我自己的記錄器實現,該記錄器執行其日志記錄,然后委托給用戶配置的記錄器。 但是,我看到了一些問題:如果用戶放置了正常的日志記錄后端,那么org.slf4j.impl.StaticLoggerBinder多個實例都在類路徑上。 這將發出警告,我可能無法確定,我的實現是被調用的。

有更好的解決方案嗎? 一個完全不同的方法? 這個想法本身就不好嗎? 怎么做到這一點?

SLF4J的重點不是讓應用程序最終用戶選擇他們的日志框架(他們為什么要關心?),而是讓開發人員包含一個庫,而不必綁定到庫的選擇日志框架。

因此,如果要從已部署的應用程序上載調試信息,則可以修復日志記錄實現。 如果需要,用戶仍然可以編輯實現的配置文件。

由於SLF4J是開源的,因此您可以將其修改為使用除org.slf4j.impl.StaticLoggerBinder其他類。 然后,您的自定義StaticLoggerBinder類可以加載原始的,用戶提供的org.slf4j.impl.StaticLoggerBinder (如果存在)。

另一個想法是在您的應用程序中使用自定義LoggerFactory (而不是org.slf4j.LoggerFactory ),它返回一個Logger委托。 此委托類委托日志記錄方法調用原始Logger實現,並在必要時將日志發送到服務器。

無論如何,兩者對我來說都是一個尷尬的黑客,創建兩個工件(一個用於最終用戶,另一個用於開發人員)聞起來更好。

(最后,我不知道它是什么類型的庫/應用程序,但是在我的工作環境中,如果庫將數據發送到第三方服務器是不可接受的。你確定你真的需要這樣做嗎? )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM