如果您希望能夠輕鬆區分日誌級別併爲每個類使用不同的日誌目標(「appender」),那麼您是對的,即不是最佳方法。
它通常建議每個類都有一個靜態ILog
情況下,後命名的完全合格的類型:
namespace Animals
{
public class Dog
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Dog));
}
public class Cat
{
private static readonly ILog Log = LogManager.GetLogger(typeof(Cat));
}
}
雖然這看起來像是與具有單更多的工作,它證明了在長期非常方便。一旦你做到了這一點,很容易區分通過配置文件Dog
和Cat
日誌級別(例如與log4net語法所示):
<log4net>
<!-- appender definitions ommited -->
<!-- default for all loggers in Animals namespace -->
<logger name="Animals">
<level value="WARN"/>
</logger>
<!-- ...but we need full debug for Dogs -->
<logger name="Animals.Dog">
<level value="DEBUG"/>
</logger>
<!-- ...and we want to send Cat messages over e-mail -->
<logger name="Animals.Cat">
<level value="INFO"/>
<appender-ref ref="SmtpAppender"/>
</logger>
</log4net>
日誌框架log4net的一樣也使用的hierarchical logging的概念:一個記錄器被稱爲另一個記錄器的祖先,如果它的名字後跟一個點是後代記錄器名稱的前綴。要使用此功能,最好避免手動命名記錄器(使用硬編碼string
),而是使用類型信息來包含整個名稱空間。
如何依賴日誌解決方案干擾有效的單元測試?我很想看到一個例子。 – tsells
我同意@tsells:記錄可能是規避單身人士的最佳例外(儘管擁有* single * logger是我不主張的)。如果您使用的是日誌記錄框架,我非常懷疑您是否需要自己測試記錄器,或者注入記錄器模擬器?我認爲在爲單元測試啓用日誌記錄功能時沒有太大的傷害,日誌級別可以根據需要進行不同的配置,而且只能幫助解決問題。 – Groo