版本
- Nlog 5.0.4
- .NET 6.0 應用程式
最初我使用一個作業正常的 XML 組態檔配置 NLog,但是檔案中有一個秘密字串,所以我想轉到編程配置,這樣我就可以在 C# 中安全地檢索秘密字串,而不是在檔案中以明文形式保存它。
我能夠讓編程配置作業,但秘密字串需要一個異步方法來檢索,因此它不能在 Logger 建構式中。然后,我從 Logger 建構式中取出配置代碼和異步呼叫,并制作了一個工廠方法。
我的問題是:由于我的配置需要異步呼叫,我不知道如何使用私有建構式工廠方法而不是公共建構式在每個類中獲取 Logger。
這是我當前的 NLog 設定:
public class MyLogger : Logger
{
// Private constructor
private MyLogger(LoggingConfiguration config)
{
// Apply config
LogManager.Configuration = config;
}
// FactoryMethod
public async static Task<MyLogger> BuildMyLogger()
{
LoggingConfiguration config = new LoggingConfiguration();
var secret = await CallToGetSecretString();
DatabaseTarget databaseTarget = new DatabaseTarget("database")
{
ConnectionString = secret,
CommandType = System.Data.CommandType.StoredProcedure,
CommandText = "[StoredProcedure]",
Parameters = {
new DatabaseParameterInfo("@logged", "${date}")
// Shortened...
}
};
config.AddRuleForAllLevels(databaseTarget);
return new MyLogger(config);
}
// Other code here...
}
以前我的設定是:
public class MyLogger : Logger
{
public MyLogger()
{
LogManager.Configuration = new XmlLoggingConfiguration("NLog/MyNlogConfig.config");
}
}
此呼叫適用于以前的方式,但在使用新配置時會引發錯誤
private readonly static MyLogger logger = (MyLogger)LogManager.GetCurrentClassLogger(typeof(MyLogger));
System.TypeInitializationException: 'The type initializer for 'App.Logic.MyClass' threw an exception.'
Inner Exception
InvalidCastException: Unable to cast object of type 'NLog.Logger' to type 'App.Nlog.MyLogger'.
我還嘗試從一個類中呼叫工廠方法,但由于它是異步的,所以這是不可能的
private readonly static MyLogger logger = await MyLogger.BuildMyLogger();
CS1992 The 'await' operator can only be used when contained within a method or lambda expression marked with the 'async' modifier
感謝您花時間就此問題提出建議。
uj5u.com熱心網友回復:
您應該只嘗試加載 NLog 配置一次,而不是每次創建 Logger 物件時。新代碼可能會失敗,因為MyLogger不再具有有效的默認建構式。
認為您應該專注于在應用程式啟動時創建初始 NLog-config,并LogManager.Configuration盡早將其分配給。
請注意,您還可以使用NLog Context從 NLog.config 訪問應用程式機密。前任。${gdc:item=SecretKey}和NLog.GlobalDiagnosticsContext.Set("SecretKey","SomeSecretValue");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537070.html
標籤:C#异步配置日志
上一篇:異步搜索欄
