在這幾天搞的一個wcf net 6.0服務中,用到了NLog。有幾個類別庫,每個類別庫中總是有相同的代碼,只需更改類的名稱即可完成簡單的復制粘貼。
這是多次出現的類,名稱不同 SomeClass1LoggerService、SomeClass2LoggerService、SomeClass3LoggerService、SomeClass4LoggerService..... 只有類名和日志檔案名正在更改。
public class SomeClassLoggerService
{
public static LogFactory Instance { get { return _instance.Value; } }
private static Lazy<LogFactory> _instance = new Lazy<LogFactory>(BuildLogFactory);
private static LogFactory BuildLogFactory()
{
string basePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string configFilePath = Path.Combine(basePath, "SomeClass.nlog");
LogFactory logFactory = new LogFactory();
logFactory.Configuration = new XmlLoggingConfiguration(configFilePath, logFactory);
return logFactory;
}
}
這是獲取日志實體的代碼:
static NLog.ILogger _Logger = SomeClassxLoggerService.Instance.GetCurrentClassLogger();
我試影像這樣創建一個派生類:
public class SomeDerivedClassLoggerService:SomeClassLoggerService
{
}
但問題是 Assembly.GetExecutingAssembly() 總是回傳基類的名稱和路徑,我需要使用派生類名稱和路徑創建日志。在我看來,沒有辦法將派生類的實體傳遞給 SomeClassLoggerService,因此我可以在正確的位置使用派生類名稱創建日志。在此示例中,SomeDerivedClassLoggerService 的日志檔案應命名為 SomeDerivedClass.nlog e,保存在與 SomeDerivedClass.dll 相同的路徑中
uj5u.com熱心網友回復:
也許您可以使用泛型并將派生型別作為泛型引數傳遞給基類?如果這是可以接受的,你可以這樣寫:
public abstract class SomeClassLoggerService<T> where T : SomeClassLoggerService<T>
{
public static LogFactory Instance { get { return _instance.Value; } }
private static Lazy<LogFactory> _instance = new Lazy<LogFactory>(BuildLogFactory);
private static LogFactory BuildLogFactory()
{
string basePath = Path.GetDirectoryName(typeof(T).Assembly.Location);
string configFilePath = Path.Combine(basePath, $"{typeof(T).Name}.nlog");
LogFactory logFactory = new LogFactory();
logFactory.Configuration = new XmlLoggingConfiguration(configFilePath, logFactory);
return logFactory;
}
}
public class SomeDerivedClassLoggerService : SomeClassLoggerService<SomeDerivedClassLoggerService>
{
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537906.html
標籤:遗产.net核心
上一篇:使用GApps腳本將GSheets同步到FirebaseRealtime時出現錯誤的.JSON格式
下一篇:Perl中的位元組序列
