內開始我有一個創建一個應用程序域並啓動它的服務:獲取組件名稱爲過程的應用程序域
this._appDomain = AppDomain.CreateDomain(this._appName, AppDomain.CurrentDomain.Evidence, appDomainSetup);
this._startStopControllerToRun = (IStartStop)this._appDomain.CreateInstanceFromAndUnwrap(assemblyName, this._fullyQualifiedClassName);
this._startStopControllerToRun.Start();
這已經很長一段時間,現在運行良好。問題在於,在此應用程序域中啓動的控制器調用框架日誌記錄類。記錄器獲取條目程序集名稱並將其作爲源記錄在事件日誌中。這是記錄器如何得到源(主叫)名稱:
private static string GetSource()
{
try
{
var assembly = Assembly.GetEntryAssembly();
// GetEntryAssembly() can return null when called in the context of a unit test project.
// That can also happen when called from an app hosted in IIS, or even a windows service.
if (assembly == null)
{
// From http://stackoverflow.com/a/14165787/279516:
assembly = new StackTrace().GetFrames().Last().GetMethod().Module.Assembly;
}
return assembly.GetName().Name;
}
catch
{
return "Unknown";
}
}
並稱if
檢查,記錄器將記錄「未知」的源之前。經過一番研究,我在if
區塊中加入了這個嘗試。現在,記錄器將「mscorlib」記錄爲源(輸入程序集名稱)。
這是概述: 主機 - >控制器(應用程序域之內運行)
我怎樣才能獲得組件(包含控制器)域內運行的名字嗎?
注:我也試過這個(下同),但它給了我在日誌類所在的框架(未在該控制器應用領域中運行的組件的名稱)的名稱:
assembly = Assembly.GetExecutingAssembly();
避免尋找後門來獲取由代碼輕鬆準確提供的信息。添加一個屬性。 –
那麼基本上傳遞一個字符串到日誌方法? Logger.Log(「MyApp」,message);' –
當業務邏輯層完成日誌記錄並且可以從多個使用者調用日誌時,該方法不起作用。消費者知道他們的名字,但每個人都必須將這些信息傳遞給邏輯方法。我不想像這樣傳遞信息,我真的很想在一個地方得到它。 –