Настройте в настройках приложения Nlog для записи в Seq
У меня есть приложение в net core, приложение записывает все журналы в SeqLog, я использовал Nlog для настройки всего, и до сих пор я использовал файл .xml, чтобы предоставить Nlog всю информацию, полезную для правильной работы. Просматривая Интернет, я увидел, что можно использовать appsetting вместо файла .config, написанного в xml, для объявления всех настроек. Теперь я хотел бы удалить этот файл .config и прописать все в appsetting, поэтому я начал писать все и вроде бы работает, за исключением одной мелочи: вот как выглядит мой файл .config:
<targets>
<target name="seq" xsi:type="Seq" serverUrl="https://....." apiKey="....." >
<property name="Application" value="Name Application" />
<property name="MachineName" value="localhost" />
<property name="Environment" value="TEST" />
<property name="Body" value =" ${aspnet-request-posted-body}" />
<property name="Source" value="${logger}" />
<parameter name="@json" layout="${event-properties:item=JsonMessage}" />
<parameter name="@error" layout="${event-properties:item=ErrorMessage}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="seq" />
</rules>
Затем переносим все в appsetting, вот так это выглядит:
"NLog": {
"extensions": [
{ "assembly": "NLog.Targets.Seq" }
],
"targets": {
"seq": {
"type": "Seq",
"serverUrl": "https://.....",
"apiKey": "........",
"propertys": [
{
"name": "Application",
"value": "Application_name"
},
{
"name": "MachineName",
"value": "localhost"
},
{
"name": "Environment",
"value": "TEST"
},
{
"name": "Body",
"value": "${aspnet-request-posted-body}"
},
{
"name": "Source",
"value": "${logger}"
}
],
"parameters": [
{
"name": "@json",
"layout": "${event-properties:item=JsonMessage}"
},
{
"name": "@error",
"layout": "${event-properties:item=ErrorMessage}"
}
]
}
},
"rules": [
{
"logger": "*",
"minLevel": "Info",
"writeTo": "seq"
}
]
},
Проблема в том, что свойства не читаются, поэтому seqlog, который должен писать мне, например, Тело или имя машины, не делает, я не нашел в Интернете, если способ, которым я задекларировал свойства и параметры правильно, но на данный момент я предполагаю, что это не так, поэтому мне интересно, как правильно объявить свойства и параметры в настройках приложений?
Может ли это быть проблемой из-за конфигурации Program.cs? Вот что я написал:
var config = new ConfigurationBuilder()
.SetBasePath(System.IO.Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true).Build();
LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));
var logger = NLogBuilder.ConfigureNLog(LogManager.Configuration).GetCurrentClassLogger();
try
{
logger.Debug("init main");
var host = CreateHostBuilder(args).Build();
CreateDbIfNotExists(host);
host.Run();
}
Я попытался распечатать свойства, объявленные в appsetting, в seqlog, но они не печатаются. Я несколько раз пытался изменить синтаксис, но результат не изменился
1 ответ
Размещение в качестве ответа, чтобы помочь людям найти его, но комментарий Рольфа Кристенсена выглядит как правильный ответ.
Вот пример из datalust/nlog-targets-seq
{
"NLog": {
"throwConfigExceptions": true,
"targets": {
"seq": {
"type": "BufferingWrapper",
"bufferSize": 200,
"flushTimeout": 2000,
"slidingTimeout": false,
"target": {
"type": "Seq",
"serverUrl": "http://localhost:5341",
"apiKey": "",
"properties": [
{
"name": "Source",
"value": "${Logger}",
},
{
"name": "ThreadId",
"value": "${ThreadId}",
"as": "number"
},
{
"name": "MachineName",
"value": "${MachineName}",
}]
}
}
},
"rules": [
{
"logger": "*",
"minLevel": "Info",
"writeTo": "seq"
}]
}
}