[英]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.