![](/img/trans.png)
[英]Is there a way to add %APPDATA% to the Log4Net configuration path in AssemblyInfo.cs?
[英]Log4Net configuration loading in AssemblyInfo
我面臨一個奇怪的問題。
在一個解決方案中,我有一個共享程序集信息文件(解決方案文件)並將其與常規 AssemblyInfo.cs 一起鏈接到我的項目中。 屬性設置為構建。 所有項目之間共享的屬性位於 SharedAssemblyInfo.cs 文件中。 特定於項目的屬性位於 AssemblyInfo.cs 中。
現在在配置 log.net 時,只有在將 log.net 屬性放入 SharedAssemblyInfo.cs 時才會讀取配置文件。 當我把它放入 AssemblyInfo.cs 時,log.net 不會初始化。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
這對我來說毫無意義。 如果它只能在 AssemblyInfo.cs 中工作,我會以某種方式理解。 認為這可能是編譯順序或文件包含在 csproj 文件中的順序,但這似乎並不重要。
任何的想法?
剛剛找到了行為的根本原因。
我有這樣的程序集:
Job.exe -> Shared.dll
在 Shared.dll 中,我有一個調用LogManager.GetLogger(
) 的日志記錄服務。 看來,log.net 程序集屬性需要位於首先調用LogManager.GetLogger()
的程序集中。 當我第一次從 Job.exe 調用GetLogger()
時,即使 Shared.dll 中沒有Shared.dll
程序集屬性,Log4Net 也會正確初始化。
在文檔中也找到了這個:
使用屬性可以是一種更清晰的方法,用於定義將從何處加載應用程序的配置。 但是值得注意的是,屬性是純粹被動的。 它們只是信息。 因此,如果您使用配置屬性,則必須調用 log.net 以允許它讀取屬性。 對 LogManager.GetLogger 的簡單調用將導致調用程序集上的屬性被讀取和處理。 因此,必須在應用程序啟動期間盡早進行日志記錄調用,當然在加載和調用任何外部程序集之前。
如果使用此方法配置 Log4Net,則在從入口程序集以外的程序集獲取記錄器時會遇到相同的問題。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net configSource="log4net.config" />
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.