Я пытаюсь написать собственный LayoutRenderer, который регистрирует данные, считанные из объекта, но кажется, что NLog не работает должным образом с внедрением зависимостей.
Вот мой CustomLayoutRenderer:
[LayoutRenderer("custom-value")]
public class CustomLayoutRenderer : LayoutRenderer
{
private readonly RequestContext _context;
public CustomLayoutRenderer(RequestContext context)
{
_context = context;
}
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(_context.CustomValue);
}
}
Он использует этот объект RequestContext:
public class RequestContext
{
public string CustomValue { get; set; } = "Valid custom value";
}
Я также подключаю DI, настраиваю NLog и регистрирую свой LayoutRenderer в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
LayoutRenderer.Register("custom-value");
loggerFactory.AddNLog();
app.AddNLogWeb();
env.ConfigureNLog("nlog.config");
// ...
}
Затем я пытаюсь использовать свой ${custom-value в nlog.config, но получаю ошибку в AddNLog()
code> вызов:
2017-02-03 13:08:08.0284 Ошибка анализа конфигурации из [папка-проекта]\bin\Debug\ Ошибка net452\win7-x64\NLog.config.
Исключение: NLog.NLogConfigurationException: Исключение при анализе [папки проекта]\bin\Debug\net452\win7-x64\NLog.config.
NLog. NLogConfigurationException: невозможно получить доступ к конструктору типа: ATest.CustomLayoutRenderer. Предоставлено ли необходимое разрешение?
в NLog.Internal.FactoryHelper.CreateInstance(Type t)
...
< h2>Примечания
Причина, по которой я пытаюсь это сделать, заключается в том, что я хотел бы регистрировать некоторую информацию, доступную только с контроллера (например, TraceIdentifier, части URL-адреса и некоторые пользовательские вещи, специфичные для конкретного запроса). Значения в RequestContext будут установлены контроллером при получении запроса.
Следующий рендерер работает должным образом, что заставляет меня думать, что это проблема внедрения зависимостей:< /p>
[LayoutRenderer("custom-value")]
public class CustomLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append("Hello, World!");
}
}
Я видел эту ошибку NLog, но сейчас она помечена как исправленная, поэтому я пишу здесь, а не там.
И для полноты картины, вот что я добавил в свой project.json:
"dependencies": {
...
"NLog.Extensions.Logging": "1.0.0-*",
"NLog.Web.AspNetCore": "4.3.0"
},
Подробнее здесь: https://stackoverflow.com/questions/420 ... -injection
Пользовательский NLog LayoutRenderer с конструктором, использующим внедрение зависимостей ⇐ C#
Место общения программистов C#
1729474413
Anonymous
Я пытаюсь написать собственный LayoutRenderer, который регистрирует данные, считанные из объекта, но кажется, что NLog не работает должным образом с внедрением зависимостей.
Вот мой CustomLayoutRenderer:
[LayoutRenderer("custom-value")]
public class CustomLayoutRenderer : LayoutRenderer
{
private readonly RequestContext _context;
public CustomLayoutRenderer(RequestContext context)
{
_context = context;
}
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(_context.CustomValue);
}
}
Он использует этот объект RequestContext:
public class RequestContext
{
public string CustomValue { get; set; } = "Valid custom value";
}
Я также подключаю DI, настраиваю NLog и регистрирую свой LayoutRenderer в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
LayoutRenderer.Register("custom-value");
loggerFactory.AddNLog();
app.AddNLogWeb();
env.ConfigureNLog("nlog.config");
// ...
}
Затем я пытаюсь использовать свой ${custom-value в nlog.config, но получаю ошибку в AddNLog()
code> вызов:
2017-02-03 13:08:08.0284 Ошибка анализа конфигурации из [папка-проекта]\bin\Debug\ Ошибка net452\win7-x64\NLog.config.
Исключение: NLog.NLogConfigurationException: Исключение при анализе [папки проекта]\bin\Debug\net452\win7-x64\NLog.config.
NLog. NLogConfigurationException: невозможно получить доступ к конструктору типа: ATest.CustomLayoutRenderer. Предоставлено ли необходимое разрешение?
в NLog.Internal.FactoryHelper.CreateInstance(Type t)
...
< h2>Примечания
Причина, по которой я пытаюсь это сделать, заключается в том, что я хотел бы регистрировать некоторую информацию, доступную только с контроллера (например, TraceIdentifier, части URL-адреса и некоторые пользовательские вещи, специфичные для конкретного запроса). Значения в RequestContext будут установлены контроллером при получении запроса.
Следующий рендерер работает должным образом, что заставляет меня думать, что это проблема внедрения зависимостей:< /p>
[LayoutRenderer("custom-value")]
public class CustomLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append("Hello, World!");
}
}
Я видел эту ошибку NLog, но сейчас она помечена как исправленная, поэтому я пишу здесь, а не там.
И для полноты картины, вот что я добавил в свой project.json:
"dependencies": {
...
"NLog.Extensions.Logging": "1.0.0-*",
"NLog.Web.AspNetCore": "4.3.0"
},
Подробнее здесь: [url]https://stackoverflow.com/questions/42033398/custom-nlog-layoutrenderer-with-constructor-using-dependency-injection[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия