Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 588 589 590 591 592 593 594 595 596 ... 642
Перейти на страницу:

  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&lt;T&gt;. Приведите содержимое файла IAppLogging.cs к следующему виду:

using System;

using System.Runtime.CompilerServices;

namespace AutoLot.Services.Logging

{

  public interface IAppLogging&lt;T&gt;

  {

    void LogAppError(Exception exception, string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppError(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppCritical(Exception exception, string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppCritical(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppDebug(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppTrace(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppInformation(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

    void LogAppWarning(string message,

      [CallerMemberName] string memberName = &quot;&quot;,

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

      [CallerFilePath] string sourceFilePath = &quot;&quot;,

      [CallerLineNumber] int sourceLineNumber = 0);

  }

}

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

_appLogger.LogAppWarning(&quot;A warning&quot;);

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

_appLogger.LogAppWarning (&quot;A warning&quot;,&quot;DoWork&quot;,&quot;c:/myfilepath/MyClassFile.cs&quot;,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&lt;T&gt;. Добавьте конструктор, который принимает экземпляр реализации ILogger&lt;T&gt; (интерфейс, поддерживаемый напрямую ASP.NET Core) и экземпляр реализации IConfiguration. Внутри конструктора получите доступ к конфигурации, чтобы извлечь имя приложения из файла настроек. Все три элемента (ILogger&lt;T&gt;, IConfiguration и имя приложения) необходимо сохранить в переменных уровня класса.

1 ... 588 589 590 591 592 593 594 595 596 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга