From 33814bb6f47c57706790de2f7bf45da6032f114d Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Fri, 21 Nov 2025 23:21:56 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SfeduSchedule/Logging/LoggerExtensions.cs | 46 ++++++++++++++++++++++ SfeduSchedule/Services/ModeusHttpClient.cs | 22 +++++------ SfeduSchedule/Services/ModeusService.cs | 30 +++++--------- 3 files changed, 64 insertions(+), 34 deletions(-) create mode 100644 SfeduSchedule/Logging/LoggerExtensions.cs diff --git a/SfeduSchedule/Logging/LoggerExtensions.cs b/SfeduSchedule/Logging/LoggerExtensions.cs new file mode 100644 index 0000000..d07fe52 --- /dev/null +++ b/SfeduSchedule/Logging/LoggerExtensions.cs @@ -0,0 +1,46 @@ +using System.Runtime.CompilerServices; + +namespace SfeduSchedule.Logging; + +public static class LoggerExtensions +{ + public static void LogTraceHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogTrace("[{Member}] {Message}", memberName, message); + } + + public static void LogDebugHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogDebug("[{Member}] {Message}", memberName, message); + } + + public static void LogInformationHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogInformation("[{Member}] {Message}", memberName, message); + } + + public static void LogWarningHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogWarning("[{Member}] {Message}", memberName, message); + } + + public static void LogErrorHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogError("[{Member}] {Message}", memberName, message); + } + + public static void LogErrorHere(this ILogger logger, Exception exception, string message, [CallerMemberName] string memberName = "") + { + logger.LogError(exception, "[{Member}] {Message}", memberName, message); + } + + public static void LogCriticalHere(this ILogger logger, string message, [CallerMemberName] string memberName = "") + { + logger.LogCritical("[{Member}] {Message}", memberName, message); + } + + public static void LogCriticalHere(this ILogger logger, Exception exception, string message, [CallerMemberName] string memberName = "") + { + logger.LogCritical(exception, "[{Member}] {Message}", memberName, message); + } +} diff --git a/SfeduSchedule/Services/ModeusHttpClient.cs b/SfeduSchedule/Services/ModeusHttpClient.cs index f2096d4..87e8cee 100644 --- a/SfeduSchedule/Services/ModeusHttpClient.cs +++ b/SfeduSchedule/Services/ModeusHttpClient.cs @@ -3,6 +3,7 @@ using System.Text.Json; using Microsoft.Net.Http.Headers; using ModeusSchedule.Abstractions; using ModeusSchedule.Abstractions.DTO; +using SfeduSchedule.Logging; namespace SfeduSchedule.Services; @@ -23,7 +24,7 @@ public class ModeusHttpClient public void SetToken(string? token) { if (string.IsNullOrWhiteSpace(token)) { - _logger.LogError("SetToken: Предоставленный токен пустой."); + _logger.LogErrorHere("Предоставленный токен пустой."); return; } @@ -40,8 +41,7 @@ public class ModeusHttpClient var response = await _httpClient.SendAsync(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) { - _logger.LogError("GetScheduleAsync: Неуспешный статус при получении расписания: {StatusCode}, Request: {msr}", - response.StatusCode, msr); + _logger.LogErrorHere($"Неуспешный статус при получении расписания: {response.StatusCode}, Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); return null; } return await response.Content.ReadAsStringAsync(); @@ -54,8 +54,7 @@ public class ModeusHttpClient var response = await _httpClient.SendAsync(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) { - _logger.LogError("GetAttendeesAsync: Неуспешный статус при получении расписания: {StatusCode}, eventId: {eventId}", - response.StatusCode, eventId); + _logger.LogErrorHere($"Неуспешный статус при получении расписания: {response.StatusCode}, eventId: {eventId}"); } List? attendees; try @@ -65,7 +64,7 @@ public class ModeusHttpClient } catch (Exception ex) { - _logger.LogError(ex, "GetAttendeesAsync: Deserialization failed."); + _logger.LogErrorHere(ex, "Deserialization failed."); } return new List(); @@ -80,8 +79,7 @@ public class ModeusHttpClient var response = await _httpClient.SendAsync(request); if (response.StatusCode != System.Net.HttpStatusCode.OK) { - _logger.LogError("GetScheduleAsync: Неуспешный статус при получении расписания: {StatusCode}, Request: {requestDto}", - response.StatusCode, requestDto); + _logger.LogErrorHere($"Неуспешный статус при получении расписания: {response.StatusCode}, Request: {JsonSerializer.Serialize(requestDto, GlobalConsts.JsonSerializerOptions)}"); return null; } return await response.Content.ReadAsStringAsync(); @@ -99,11 +97,10 @@ public class ModeusHttpClient }), Encoding.UTF8, "application/json"); var response = await _httpClient.SendAsync(request); - _logger.LogInformation("GetGuidAsync: Ответ получен: {StatusCode}", response.StatusCode); + _logger.LogInformationHere($"Ответ получен: {response.StatusCode}"); if (response.StatusCode != System.Net.HttpStatusCode.OK) { - _logger.LogError("GetGuidAsync: Неуспешный статус при получении расписания: {StatusCode}, Name: {fullName}", - response.StatusCode, fullName); + _logger.LogErrorHere($"Неуспешный статус при получении расписания: {response.StatusCode}, Name: {fullName}"); return null; } @@ -120,8 +117,7 @@ public class ModeusHttpClient } catch { - _logger.LogWarning( - "GetGuidAsync: не удалось получить идентификатор пользователя. FullName={FullName}", fullName); + _logger.LogWarningHere($"Не удалось получить идентификатор пользователя. FullName={fullName}"); return null; } diff --git a/SfeduSchedule/Services/ModeusService.cs b/SfeduSchedule/Services/ModeusService.cs index 27411b4..0b3d727 100644 --- a/SfeduSchedule/Services/ModeusService.cs +++ b/SfeduSchedule/Services/ModeusService.cs @@ -5,6 +5,7 @@ using Ical.Net.DataTypes; using Ical.Net.Serialization; using ModeusSchedule.Abstractions; using ModeusSchedule.Abstractions.DTO; +using SfeduSchedule.Logging; namespace SfeduSchedule.Services; @@ -30,7 +31,7 @@ public class ModeusService var schedule = await GetScheduleAsync(msr); if (schedule == null) { - _logger.LogError("GetScheduleJsonAsync: schedule is null. {@Request}", msr); + _logger.LogErrorHere($"schedule is null. {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); throw new Exception("Schedule is null"); } @@ -41,25 +42,16 @@ public class ModeusService switch (scheduleJson) { case null: - _logger.LogError( - "GetScheduleJsonAsync: scheduleJson is null. Schedule: {Schedule}\n Request: {msr}", - schedule, JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogErrorHere($"scheduleJson is null. Schedule: {schedule}\n Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); break; case { Embedded: null }: - _logger.LogError( - "GetScheduleJsonAsync: scheduleJson.Embedded is null. Response: {@response}\nscheduleJson: {@scheduleJson}\n Request: {msr}", - schedule, scheduleJson, JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogErrorHere($"scheduleJson.Embedded is null. Response: {schedule}\nscheduleJson: {scheduleJson}\n Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); break; case { Embedded.Events: null }: - _logger.LogError( - "GetScheduleJsonAsync: scheduleJson.Embedded.Events is null. Response: {@response}\nEmbedded: {@Embedded}\n Request: {msr}", - schedule, scheduleJson.Embedded, - JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogErrorHere($"scheduleJson.Embedded.Events is null. Response: {schedule}\nscheduleJson: {scheduleJson}\n Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); break; case { Embedded.Events.Length: 0 }: - _logger.LogWarning( - "GetScheduleJsonAsync: scheduleJson.Embedded.Events is empty. Embedded: {@Embedded}\n Request: {msr}", - scheduleJson.Embedded, JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogWarningHere($"scheduleJson.Embedded.Events is empty. Embedded: {scheduleJson.Embedded}\n Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); break; default: return scheduleJson; @@ -67,9 +59,7 @@ public class ModeusService } catch (Exception ex) { - _logger.LogError(ex, - "GetScheduleJsonAsync: Deserialization failed. Schedule: {Schedule}\n Request: {msr}", schedule, - JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogErrorHere($"Deserialization failed. Schedule: {schedule}\n Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}\n Exception: {ex}"); } return null; @@ -80,8 +70,7 @@ public class ModeusService var scheduleJson = await GetScheduleJsonAsync(msr); if (scheduleJson == null) { - _logger.LogError("GetIcsAsync: scheduleJson is null after deserialization. Request: " + - JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)); + _logger.LogErrorHere($"scheduleJson is null after deserialization. Request: {JsonSerializer.Serialize(msr, GlobalConsts.JsonSerializerOptions)}"); return null; } @@ -189,8 +178,7 @@ public class ModeusService var serializer = new CalendarSerializer(); var serializedCalendar = serializer.SerializeToString(calendar); - _logger.LogInformation("GetIcsAsync: serialized calendar created. Length: {Length}", - serializedCalendar?.Length ?? 0); + _logger.LogInformationHere($"serialized calendar created. Length: {serializedCalendar?.Length ?? 0}"); return serializedCalendar; }