From ce462a8b6689b490d2c4f7d70975b02504dd2369 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Fri, 19 Apr 2024 10:05:43 +0200 Subject: [PATCH] =?UTF-8?q?Funktion:=20Hinzuf=C3=BCgen=20von=20strukturier?= =?UTF-8?q?ten=20Logging-Erweiterungen=20und=20Korrektur=20eines=20Paramet?= =?UTF-8?q?erfehlers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hinzufügen der Methoden `LogMessageList` und `LogServiceMessage` für verbessertes Nachrichten-Logging. - Korrektur der Schreibweise des Parameters `separator`. - Dokumentation der Methoden für bessere Klarheit. --- .../DesignTimeBuild/.dtbcache.v2 | Bin 294283 -> 294283 bytes .vs/DigitalData.Core/v17/.futdcache.v2 | Bin 6551 -> 6551 bytes .vs/DigitalData.Core/v17/.suo | Bin 269312 -> 270336 bytes .../digitaldata.core.metadata.v6.1 | Bin 450815 -> 450828 bytes .../digitaldata.core.projects.v6.1 | Bin 1394145 -> 1960321 bytes DigitalData.Core.API/ControllerExtensions.cs | 13 +++- .../LoggerExtensions.cs | 41 ++++++++++++ .../Application/IServiceMessage.cs | 59 +++++++++++++++--- 8 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 DigitalData.Core.Application/LoggerExtensions.cs diff --git a/.vs/DigitalData.Core/DesignTimeBuild/.dtbcache.v2 b/.vs/DigitalData.Core/DesignTimeBuild/.dtbcache.v2 index fa7747984f5ab55806ae22e476bd8c256cd1d0cc..eded374d76911d328a56894c16fc22d926827e06 100644 GIT binary patch delta 7956 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 dS1PVjJW_Ery3OHHYF=#4)T!}jg9~S delta 9049 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 D-KLpz diff --git a/.vs/DigitalData.Core/v17/.futdcache.v2 b/.vs/DigitalData.Core/v17/.futdcache.v2 index 6c7173710cdb5e8694a8c91b9e163cec229d2534..08a29a121159a2d321cd2dbf67f886f6015915c6 100644 GIT binary patch delta 145 zcmbPkJl%N1ZBf>vFWPo4n*2a?FzlM9!*z!)!T7jLM+H1+=FGN2wAb&#=lI3l4c Y%GsJ!fmX&(-Y)>L$WM}OvW;Xk01K8l=Kufz delta 145 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 YAXB5}2sg3R_Qg@pZbpBpAtqh>Pcd}(F#rGn delta 5997 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 aFJYSdy=AShDg9!d&v2|ImfxpElK2mA_4xw; diff --git a/.vs/ProjectEvaluation/digitaldata.core.projects.v6.1 b/.vs/ProjectEvaluation/digitaldata.core.projects.v6.1 index 51932b4fb35f5af6062527758c6a774b57dfda77..fb6b85d4fd904d1c90447f655c6efe04777f9cee 100644 GIT binary patch delta 219 zcmaFZ9ol%gyrG4$g{g(Pg{6hHg{_6Xg`}l=0(3+wJeBv6!*7+cI)(w`JtM;J-b00V9f}CQDl!|F$@R Vr?XLY82k|4Ztz27qc1JY1ONgbQ}O@+ delta 51 zcmZp?T>h{-w4sHug{g(Pg{6hHg{_6Xg` 0 ? sb.ToString() : null); } + + /// + /// Returns an ObjectResult representing an internal server error (status code 500) with optional exception and message details. + /// + /// The ControllerBase instance representing the controller. + /// Optional. The exception that occurred, if any. + /// Optional. A custom error message to include in the response. + /// /// Optional. A custom error message key to include in the response. + /// An ObjectResult representing an internal server error (status code 500). + public static ObjectResult InnerServiceError(this ControllerBase controllerBase, IServiceMessage? serviceMessage = null) => controllerBase.StatusCode(500, serviceMessage); } } \ No newline at end of file diff --git a/DigitalData.Core.Application/LoggerExtensions.cs b/DigitalData.Core.Application/LoggerExtensions.cs new file mode 100644 index 0000000..d18a435 --- /dev/null +++ b/DigitalData.Core.Application/LoggerExtensions.cs @@ -0,0 +1,41 @@ +using DigitalData.Core.Contracts.Application; +using Microsoft.Extensions.Logging; + +namespace DigitalData.Core.Application +{ + /// + /// Provides extension methods for ILogger to handle logging of message collections and service messages more effectively. + /// + public static class LoggerExtensions + { + /// + /// Logs a list of messages at the specified log level. + /// + /// The extended ILogger instance. + /// The severity level of the log entry. + /// The collection of messages to log. + /// The separator used to join messages. Default is newline. + /// Additional arguments used for formatting the log message. + public static void LogMessageList(this ILogger logger, LogLevel logLevel, IEnumerable messages, string separator = "\n", params object?[] args) + { + if (messages.Any()) + logger.Log(logLevel: logLevel, message: string.Join(separator, messages), args); + } + + /// + /// Logs all messages from a service message instance, categorized by message type to appropriate log levels. + /// + /// The extended ILogger instance. + /// The service message instance containing categorized messages. + /// The separator used to join messages within each category. Default is newline. + public static void LogServiceMessage(this ILogger logger, IServiceMessage serviceMessage, string separator = "\n") + { + logger.LogMessageList(LogLevel.Trace, serviceMessage.TraceMessages, separator); + logger.LogMessageList(LogLevel.Debug, serviceMessage.DebugMessages, separator); + logger.LogMessageList(LogLevel.Information, serviceMessage.InformationMessages, separator); + logger.LogMessageList(LogLevel.Warning, serviceMessage.WarningMessages, separator); + logger.LogMessageList(LogLevel.Error, serviceMessage.ErrorMessages, separator); + logger.LogMessageList(LogLevel.Critical, serviceMessage.CriticalMessages, separator); + } + } +} \ No newline at end of file diff --git a/DigitalData.Core.Contracts/Application/IServiceMessage.cs b/DigitalData.Core.Contracts/Application/IServiceMessage.cs index 7f55279..6a6af1d 100644 --- a/DigitalData.Core.Contracts/Application/IServiceMessage.cs +++ b/DigitalData.Core.Contracts/Application/IServiceMessage.cs @@ -1,33 +1,76 @@ -namespace DigitalData.Core.Contracts.Application +using System.Text.Json.Serialization; + +namespace DigitalData.Core.Contracts.Application { /// - /// Defines a basic structure for service messages, including a success flag and a collection of messages. - /// This interface is intended to be a base for more specific service result types, offering a way to communicate - /// operation outcomes (success or failure) along with relevant messages. + /// Defines a structured format for service messages, categorizing them into success indicators and various types of messages. + /// This interface segregates messages into client-facing messages and different levels of logging messages, facilitating targeted communications and diagnostics. /// public interface IServiceMessage { /// - /// Gets or sets a value indicating whether the service operation was successful. + /// Gets or sets a flag indicating whether the service operation was successful. /// bool IsSuccess { get; set; } /// + /// Gets or sets a collection of messages intended for client display. This is intended to replace the deprecated 'Messages' property. + /// + List ClientMessages { get; set; } + + /// + /// [Obsolete("Deprecated: Use ClientMessages instead.")] /// Gets or sets a collection of messages associated with the service operation. These messages can be error descriptions, /// success notifications, or other relevant information related to the operation's outcome. /// + [Obsolete("Deprecated: Use ClientMessages instead.")] List Messages { get; set; } /// - /// Adds a new message to the collection of service messages. + /// Gets or sets a collection of messages used for tracing program execution at a fine-grained level. These are typically voluminous and detailed. + /// + [JsonIgnore] + List TraceMessages { get; set; } + + /// + /// Gets or sets a collection of messages helpful for debugging during development. These messages are often diagnostic. + /// + [JsonIgnore] + List DebugMessages { get; set; } + + /// + /// Gets or sets a collection of informational messages, less critical than warnings, generally used for non-critical notifications. + /// + [JsonIgnore] + List InformationMessages { get; set; } + + /// + /// Gets or sets a collection of messages indicating potential issues that are not necessarily errors, but which may require attention. + /// + [JsonIgnore] + List WarningMessages { get; set; } + + /// + /// Gets or sets a collection of error messages indicating failures or problems within the service. + /// + [JsonIgnore] + List ErrorMessages { get; set; } + + /// + /// Gets or sets a collection of messages indicating critical issues that require immediate attention. + /// + [JsonIgnore] + List CriticalMessages { get; set; } + + /// + /// Adds a new message to the appropriate collection based on the message type. /// /// The message to add. /// The current instance of IServiceMessage, allowing for method chaining. IServiceMessage WithMessage(string message); /// - /// Adds a message corresponding to the specified message key to the collection of service messages. - /// This method uses the string representation of the enum value as the message. + /// Adds a message corresponding to a specified message key to the appropriate collection, facilitating localization and standardization. /// /// The enum value representing the message key. /// The current instance of IServiceMessage, allowing for method chaining.