Выбери любимый жанр

Выбрать книгу по жанру

Фантастика и фэнтези

Детективы и триллеры

Проза

Любовные романы

Приключения

Детские

Поэзия и драматургия

Старинная литература

Научно-образовательная

Компьютеры и интернет

Справочная литература

Документальная литература

Религия и духовность

Юмор

Дом и семья

Деловая литература

Жанр не определен

Техника

Прочее

Драматургия

Фольклор

Военное дело

Последние комментарии
оксана2018-11-27
Вообще, я больше люблю новинки литератур
К книге
Professor2018-11-27
Очень понравилась книга. Рекомендую!
К книге
Vera.Li2016-02-21
Миленько и простенько, без всяких интриг
К книге
ст.ст.2018-05-15
 И что это было?
К книге
Наталья222018-11-27
Сюжет захватывающий. Все-таки читать кни
К книге

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 592


592
Изменить размер шрифта:

  public static void Log(this ILogger logger, LogLevel logLevel,

    Exception exception, string message, params object[] args)

  public static void Log(this ILogger logger, LogLevel logLevel, EventId eventId,

    Exception exception, string message, params object[] args)

}

Яркая характеристика ASP.NET Core связана с расширяемостью конвейера в целом и с ведением журнала в частности. Стандартное средство ведения журнала может быть заменено другой инфраструктурой ведения журнала при условии, что новая инфраструктура способна интегрироваться с установленным шаблоном ведения журнала. Serilog — одна из инфраструктур, которая хорошо интегрируется с ASP.NET Core. В последующих разделах демонстрируется создание инфраструктуры ведения журнала, основанной на Serilog, и конфигурирование приложений ASP.NET Core для использования нового кода регистрации в журнале.

Интерфейс IAppLogging

 Начните с добавления в проект

AutoLot.Services
нового каталога по имени
Logging
. Добавьте в этот каталог новый файл под названием
IAppLogging.cs
для интерфейса
IAppLogging<T>
. Приведите содержимое файла
IAppLogging.cs
к следующему виду:

using System;

using System.Runtime.CompilerServices;

namespace AutoLot.Services.Logging

{

  public interface IAppLogging<T>

  {

    void LogAppError(Exception exception, string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppError(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppCritical(Exception exception, string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppCritical(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppDebug(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppTrace(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppInformation(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppWarning(string message,

      [CallerMemberName] string memberName = "",

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      [CallerFilePath] string sourceFilePath = "",

      [CallerLineNumber] int sourceLineNumber = 0);

  }

}

Атрибуты

CallerMemberName
,
CallerFilePath
и
CallerLineNumber
инспектируют стек вызовов для получения имени члена, пути к файлу и номера строки в вызывающем коде. Например, если строка, в которой вызывается
LogAppWarning()
, находится в функции
DoWork()
внутри файла по имени
MyClassFile.cs
, а номер этой строки 36, тогда вызов:

_appLogger.LogAppWarning("A warning");

преобразуется в следующий эквивалент:

_appLogger.LogAppWarning ("A warning","DoWork","c:/myfilepath/MyClassFile.cs",36);

Если методу при вызове передаются значения, тогда переданные значения используются вместо значений из атрибутов.

Класс AppLogging

 Класс

AppLogging
реализует интерфейс
IAppLogging
. Добавьте новый класс по имени
AppLogging
и модифицируйте операторы
using
, как показано ниже:

using System;

using System.Collections.Generic;

using System.Runtime.CompilerServices;

using Microsoft.Extensions.Configuration;

using Microsoft.Extensions.Logging;

using Serilog.Context;

Сделайте класс открытым и реализующим интерфейс

IAppLogging<T>
. Добавьте конструктор, который принимает экземпляр реализации
ILogger<T>
(интерфейс, поддерживаемый напрямую ASP.NET Core) и экземпляр реализации
IConfiguration
. Внутри конструктора получите доступ к конфигурации, чтобы извлечь имя приложения из файла настроек. Все три элемента (
ILogger<T>
,
IConfiguration
и имя приложения) необходимо сохранить в переменных уровня класса.