[英]Nlog ASP.Net Core with Elastic search target not working
NLog.Config 彈性搜索目標:
<target name="elasticWrapper" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch"
name="elastic"
connectionStringName="ElasticUrl"
index="logs-${date:format=yyyy.MM.dd}"
documentType="logevent"
includeAllProperties="true"
layout="${message}">
</target>
</target>
彈性搜索目標的 connectionstringname 屬性用於從 appsettings.json 獲取信息
appsettings.json 如下所示
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"ConnectionStrings": {
"ElasticUrl": "http://XXXXXX-XXXXXX:9200"
}
}
.Net Core 項目中的 Program.cs 文件如下所示
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
NLogBuilder.ConfigureNLog("nLog.config");
foreach (var setting in config.GetChildren().ToDictionary(x => x.Key, x => x.Value))
{
LogManager.Configuration.Variables[setting.Key] = setting.Value;
}
var logger = LogManager.GetCurrentClassLogger();
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseNLog()
.Build();
host.Run();
}
嘗試改變幾件事
我個人在容器內使用我的應用程序。 所以我將整個設置移到代碼中,並使用環境變量設置它們的值,這對我來說非常有用。
如果您的問題仍然存在,請告訴我。 我將提供通過代碼配置 nlog 的代碼。
我已經設法讓它以編程方式工作。
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
var logFactory = LogManager.LoadConfiguration("nLog.config");
foreach (var setting in config.GetChildren().ToDictionary(x => x.Key, x => x.Value))
{
logFactory.Configuration.Variables[setting.Key] = setting.Value;
}
var target = logFactory.Configuration.FindTargetByName("elastic") as ElasticSearchTarget;
target.Uri = config.GetConnectionString("ElasticUrl");
NLogBuilder.ConfigureNLog("nLog.config");
var logger = LogManager.GetCurrentClassLogger();
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseNLog()
.Build();
host.Run();
}
擴展@Sahadevan 答案。
如果您使用的是 BufferingWrapper,則 findTargetByName 需要是一個 2 步過程。
var target = logFactory.Configuration.FindTargetByName("elastic") as BufferingTargetWrapper;
var esTarget = target.WrappedTarget as ElasticSearchTarget;
示例配置:
<target xsi:type="BufferingWrapper" name="elastic"
flushTimeout="5000">
<target xsi:type="ElasticSearch"
includeAllProperties ="true">
</target>
</target>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.