Язык программирования C#9 и платформа .NET5
Шрифт:
string message, params object[] args)
public static void LogCritical(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogCritical(this ILogger logger, EventId eventId,
string message,
params object[] args)
public static void LogCritical(this ILogger logger, Exception exception,
string message,
params object[] args)
public static void LogCritical(this ILogger logger,
string message, params object[] args)
public static void Log(this ILogger logger, LogLevel logLevel,
string message, params
object[] args)
public static void Log(this ILogger logger, LogLevel logLevel, EventId eventId,
string
message, params object[] args)
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)
}
Яркая
Интерфейс 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 = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppError(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppCritical(Exception exception, string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppCritical(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppDebug(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppTrace(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppInformation(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0);
void LogAppWarning(string message,
[CallerMemberName] string memberName = "",
[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
и имя приложения) необходимо сохранить в переменных уровня класса.
Поделиться с друзьями: