2010-04-09 56 views
7

谷歌guice有一個built-in logger binding。但是如果我想使用commons-logging或log4j記錄器呢?我如何獲得谷歌guice注入自定義記錄器,說一個commons-logging或log4j記錄器

我能得到吉斯由

LogFactory.getLog(CLASS.class) 

注入創造了一個日誌,但與如內置裝訂相同的行爲:

的自動綁定設置記錄器的名稱的名稱到其中的記錄器正在噴射的類..


它有意義嗎?或者我只是簡單地使用內置的java Logger?或者只使用commons-logging而不注射?

+0

不,它是有道理的。 Log4j支持更多的日誌記錄級別,並有更多可用的appender,因此想要使用它而不是內置記錄器對我來說非常合適。 – 2010-04-09 05:28:36

回答

11

Guice wiki上的CustomInjections頁面描述瞭如何注入一個記錄器,該記錄器由它所注入的類命名。

+0

不錯的鏈接。這是一個痛苦的過程,但功能仍然存在。 – 2010-04-09 16:19:09

+0

感謝您的鏈接。它爲我工作。我使用這個策略來實現SLF4J解決方案。 – 2010-04-10 15:27:58

+3

對於所有在示例中對InjectLogger類感到困惑的人:只需在項目中創建一個名爲「InjectLogger」的空Annotation類。這不是一個外部依賴(這是我第一次假設)。 – 2013-04-20 12:49:27

1

這是您的選擇。我已經使用wiki上詳細介紹的方法成功使用了與Guice的logback

看看sli4j項目。它可能是有用的。

0

Guice對於注入接口的不同實現非常有用。這裏不是這種情況,因爲不同的日誌實現都有不同的API。

如果您希望能夠在以後使用commons loggingslf4j進行開發時更改實際的日誌記錄實施。

+0

Hibernate使用SLF4J和我整合到一個基於Guice的應用程序沒有任何問題,所以我可以推薦它,雖然我沒有玩過commons logging。 – 2010-04-09 06:15:38

0

雖然不能覆蓋所提供的java.util.logging.Logger記錄器,你綁定一個新的記錄,就像使用任何其他類:

bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...); 

但是,創建一個名爲記錄器將是一個有點困難。

如果您深入瞭解Google Guice代碼(u til.BinderImpl.java:87),您可以看到它們如何爲注入的每個記錄器實例指定不同的類名。但是,我沒有仔細檢查,以確定它是否容易重現。

可能可以創建一個提供程序或注入某種方式訪問​​上下文的工廠,以便您可以提供一個指定的記錄器。

+0

我不明白這一點。如果您在活頁夾中明確定義YourClass,則會爲整個應用程序獲取同一個班級的日誌。 – 2016-05-09 19:58:13