[HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { _logger.LogInformation ( new EventId(13,"CreateOrderFailure"), "create order failed !! order id : {orderId}",100 ); // 略 }
第一種方式 - LoggerMessage 類別
LoggerMessage.Define 是回傳委派共提供最多六個參數。 這邊簡單建立類別。
LogHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
publicstaticclassLogHelper { privatestatic Action<ILogger, int, Exception> FailedToCreateOrder => LoggerMessage.Define<int> ( LogLevel.Information, new EventId(13, nameof(CreateOrderFailure)), "create order failed !! order id : {order.Id}" ); publicstaticvoidCreateOrderFailure(this ILogger logger,Order order) { if (logger.IsEnabled(LogLevel.Information)) { FailedToCreateOrder(logger, order.Id, default!); } } }
調用方
1 2 3 4 5 6 7 8 9 10 11
[HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { // 使用擴充方法 _logger.CreateOrderFailure(new Order { Id=100 }); // 略 }
[LoggerMessage(2, LogLevel.Debug, "Https port '{port}' loaded from configuration.", EventName = "PortLoadedFromConfig")] publicstaticpartialvoidPortLoadedFromConfig(this ILogger logger, int port);
[LoggerMessage(3, LogLevel.Warning, "Failed to determine the https port for redirect.", EventName = "FailedToDeterminePort")] publicstaticpartialvoidFailedToDeterminePort(this ILogger logger);
[LoggerMessage(5, LogLevel.Debug, "Https port '{httpsPort}' discovered from server endpoints.", EventName = "PortFromServer")] publicstaticpartialvoidPortFromServer(this ILogger logger, int httpsPort); }