Skip to content

Commit d3a98b2

Browse files
authored
Use LoggerMessageAttribute in more places (#40297)
* Use LoggerMessageAttribute in more places * Servers * Antiforgery * Missed Blazor and Security projects Contributes to #32087
1 parent 4dc82d8 commit d3a98b2

File tree

17 files changed

+219
-570
lines changed

17 files changed

+219
-570
lines changed

src/Antiforgery/src/Internal/AntiforgeryLoggerExtensions.cs

Lines changed: 22 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -5,103 +5,35 @@
55

66
namespace Microsoft.AspNetCore.Antiforgery;
77

8-
internal static class AntiforgeryLoggerExtensions
8+
internal static partial class AntiforgeryLoggerExtensions
99
{
10-
private static readonly Action<ILogger, Exception?> _failedToDeserialzeTokens;
11-
private static readonly Action<ILogger, string, Exception?> _validationFailed;
12-
private static readonly Action<ILogger, Exception?> _validated;
13-
private static readonly Action<ILogger, string?, Exception?> _missingCookieToken;
14-
private static readonly Action<ILogger, string, string?, Exception?> _missingRequestToken;
15-
private static readonly Action<ILogger, Exception?> _newCookieToken;
16-
private static readonly Action<ILogger, Exception?> _reusedCookieToken;
17-
private static readonly Action<ILogger, Exception?> _tokenDeserializeException;
18-
private static readonly Action<ILogger, Exception?> _responseCacheHeadersOverridenToNoCache;
10+
[LoggerMessage(1, LogLevel.Warning, "Antiforgery validation failed with message '{Message}'.", EventName = "ValidationFailed")]
11+
public static partial void ValidationFailed(this ILogger logger, string message);
1912

20-
static AntiforgeryLoggerExtensions()
21-
{
22-
_validationFailed = LoggerMessage.Define<string>(
23-
LogLevel.Warning,
24-
new EventId(1, "ValidationFailed"),
25-
"Antiforgery validation failed with message '{Message}'.");
26-
_validated = LoggerMessage.Define(
27-
LogLevel.Debug,
28-
new EventId(2, "Validated"),
29-
"Antiforgery successfully validated a request.");
30-
_missingCookieToken = LoggerMessage.Define<string?>(
31-
LogLevel.Warning,
32-
new EventId(3, "MissingCookieToken"),
33-
"The required antiforgery cookie '{CookieName}' is not present.");
34-
_missingRequestToken = LoggerMessage.Define<string, string?>(
35-
LogLevel.Warning,
36-
new EventId(4, "MissingRequestToken"),
37-
"The required antiforgery request token was not provided in either form field '{FormFieldName}' "
38-
+ "or header '{HeaderName}'.");
39-
_newCookieToken = LoggerMessage.Define(
40-
LogLevel.Debug,
41-
new EventId(5, "NewCookieToken"),
42-
"A new antiforgery cookie token was created.");
43-
_reusedCookieToken = LoggerMessage.Define(
44-
LogLevel.Debug,
45-
new EventId(6, "ReusedCookieToken"),
46-
"An antiforgery cookie token was reused.");
47-
_tokenDeserializeException = LoggerMessage.Define(
48-
LogLevel.Error,
49-
new EventId(7, "TokenDeserializeException"),
50-
"An exception was thrown while deserializing the token.");
51-
_responseCacheHeadersOverridenToNoCache = LoggerMessage.Define(
52-
LogLevel.Warning,
53-
new EventId(8, "ResponseCacheHeadersOverridenToNoCache"),
54-
"The 'Cache-Control' and 'Pragma' headers have been overridden and set to 'no-cache, no-store' and " +
55-
"'no-cache' respectively to prevent caching of this response. Any response that uses antiforgery " +
56-
"should not be cached.");
57-
_failedToDeserialzeTokens = LoggerMessage.Define(
58-
LogLevel.Debug,
59-
new EventId(9, "FailedToDeserialzeTokens"),
60-
"Failed to deserialize antiforgery tokens.");
61-
}
62-
63-
public static void ValidationFailed(this ILogger logger, string message)
64-
{
65-
_validationFailed(logger, message, null);
66-
}
13+
[LoggerMessage(2, LogLevel.Debug, "Antiforgery successfully validated a request.", EventName = "Validated")]
14+
public static partial void ValidatedAntiforgeryToken(this ILogger logger);
6715

68-
public static void ValidatedAntiforgeryToken(this ILogger logger)
69-
{
70-
_validated(logger, null);
71-
}
16+
[LoggerMessage(3, LogLevel.Warning, "The required antiforgery cookie '{CookieName}' is not present.", EventName = "MissingCookieToken")]
17+
public static partial void MissingCookieToken(this ILogger logger, string? cookieName);
7218

73-
public static void MissingCookieToken(this ILogger logger, string? cookieName)
74-
{
75-
_missingCookieToken(logger, cookieName, null);
76-
}
19+
[LoggerMessage(4, LogLevel.Warning, "The required antiforgery request token was not provided in either form field '{FormFieldName}' "
20+
+ "or header '{HeaderName}'.", EventName = "MissingRequestToken")]
21+
public static partial void MissingRequestToken(this ILogger logger, string formFieldName, string? headerName);
7722

78-
public static void MissingRequestToken(this ILogger logger, string formFieldName, string? headerName)
79-
{
80-
_missingRequestToken(logger, formFieldName, headerName, null);
81-
}
23+
[LoggerMessage(5, LogLevel.Debug, "A new antiforgery cookie token was created.", EventName = "NewCookieToken")]
24+
public static partial void NewCookieToken(this ILogger logger);
8225

83-
public static void NewCookieToken(this ILogger logger)
84-
{
85-
_newCookieToken(logger, null);
86-
}
26+
[LoggerMessage(6, LogLevel.Debug, "An antiforgery cookie token was reused.", EventName = "ReusedCookieToken")]
27+
public static partial void ReusedCookieToken(this ILogger logger);
8728

88-
public static void ReusedCookieToken(this ILogger logger)
89-
{
90-
_reusedCookieToken(logger, null);
91-
}
29+
[LoggerMessage(7, LogLevel.Error, "An exception was thrown while deserializing the token.", EventName = "TokenDeserializeException")]
30+
public static partial void TokenDeserializeException(this ILogger logger, Exception exception);
9231

93-
public static void TokenDeserializeException(this ILogger logger, Exception exception)
94-
{
95-
_tokenDeserializeException(logger, exception);
96-
}
97-
98-
public static void ResponseCacheHeadersOverridenToNoCache(this ILogger logger)
99-
{
100-
_responseCacheHeadersOverridenToNoCache(logger, null);
101-
}
32+
[LoggerMessage(8, LogLevel.Warning, "The 'Cache-Control' and 'Pragma' headers have been overridden and set to 'no-cache, no-store' and " +
33+
"'no-cache' respectively to prevent caching of this response. Any response that uses antiforgery " +
34+
"should not be cached.", EventName = "ResponseCacheHeadersOverridenToNoCache")]
35+
public static partial void ResponseCacheHeadersOverridenToNoCache(this ILogger logger);
10236

103-
public static void FailedToDeserialzeTokens(this ILogger logger, Exception exception)
104-
{
105-
_failedToDeserialzeTokens(logger, exception);
106-
}
37+
[LoggerMessage(9, LogLevel.Debug, "Failed to deserialize antiforgery tokens.", EventName = "FailedToDeserialzeTokens")]
38+
public static partial void FailedToDeserialzeTokens(this ILogger logger, Exception exception);
10739
}

src/Components/WebAssembly/WebAssembly/src/Rendering/WebAssemblyRenderer.cs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Rendering;
1616
/// Provides mechanisms for rendering <see cref="IComponent"/> instances in a
1717
/// web browser, dispatching events to them, and refreshing the UI as required.
1818
/// </summary>
19-
internal class WebAssemblyRenderer : WebRenderer
19+
internal partial class WebAssemblyRenderer : WebRenderer
2020
{
2121
private readonly ILogger _logger;
2222

@@ -113,33 +113,18 @@ protected override void HandleException(Exception exception)
113113
{
114114
foreach (var innerException in aggregateException.Flatten().InnerExceptions)
115115
{
116-
Log.UnhandledExceptionRenderingComponent(_logger, innerException);
116+
Log.UnhandledExceptionRenderingComponent(_logger, innerException.Message, innerException);
117117
}
118118
}
119119
else
120120
{
121-
Log.UnhandledExceptionRenderingComponent(_logger, exception);
121+
Log.UnhandledExceptionRenderingComponent(_logger, exception.Message, exception);
122122
}
123123
}
124124

125-
private static class Log
125+
private static partial class Log
126126
{
127-
private static readonly Action<ILogger, string, Exception> _unhandledExceptionRenderingComponent = LoggerMessage.Define<string>(
128-
LogLevel.Critical,
129-
EventIds.UnhandledExceptionRenderingComponent,
130-
"Unhandled exception rendering component: {Message}");
131-
132-
private static class EventIds
133-
{
134-
public static readonly EventId UnhandledExceptionRenderingComponent = new EventId(100, "ExceptionRenderingComponent");
135-
}
136-
137-
public static void UnhandledExceptionRenderingComponent(ILogger logger, Exception exception)
138-
{
139-
_unhandledExceptionRenderingComponent(
140-
logger,
141-
exception.Message,
142-
exception);
143-
}
127+
[LoggerMessage(100, LogLevel.Critical, "Unhandled exception rendering component: {Message}", EventName = "ExceptionRenderingComponent")]
128+
public static partial void UnhandledExceptionRenderingComponent(ILogger logger, string message, Exception exception);
144129
}
145130
}

src/Security/Authentication/JwtBearer/src/LoggingExtensions.cs

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,14 @@
33

44
namespace Microsoft.Extensions.Logging;
55

6-
internal static class LoggingExtensions
6+
internal static partial class LoggingExtensions
77
{
8-
private static readonly Action<ILogger, Exception> _tokenValidationFailed = LoggerMessage.Define(
9-
eventId: new EventId(1, "TokenValidationFailed"),
10-
logLevel: LogLevel.Information,
11-
formatString: "Failed to validate the token.");
12-
private static readonly Action<ILogger, Exception?> _tokenValidationSucceeded = LoggerMessage.Define(
13-
eventId: new EventId(2, "TokenValidationSucceeded"),
14-
logLevel: LogLevel.Debug,
15-
formatString: "Successfully validated the token.");
16-
private static readonly Action<ILogger, Exception> _errorProcessingMessage = LoggerMessage.Define(
17-
eventId: new EventId(3, "ProcessingMessageFailed"),
18-
logLevel: LogLevel.Error,
19-
formatString: "Exception occurred while processing message.");
8+
[LoggerMessage(1, LogLevel.Information, "Failed to validate the token.", EventName = "TokenValidationFailed")]
9+
public static partial void TokenValidationFailed(this ILogger logger, Exception ex);
2010

21-
public static void TokenValidationFailed(this ILogger logger, Exception ex)
22-
=> _tokenValidationFailed(logger, ex);
11+
[LoggerMessage(2, LogLevel.Debug, "Successfully validated the token.", EventName = "TokenValidationSucceeded")]
12+
public static partial void TokenValidationSucceeded(this ILogger logger);
2313

24-
public static void TokenValidationSucceeded(this ILogger logger)
25-
=> _tokenValidationSucceeded(logger, null);
26-
27-
public static void ErrorProcessingMessage(this ILogger logger, Exception ex)
28-
=> _errorProcessingMessage(logger, ex);
14+
[LoggerMessage(3, LogLevel.Error, "Exception occurred while processing message.", EventName = "ProcessingMessageFailed")]
15+
public static partial void ErrorProcessingMessage(this ILogger logger, Exception ex);
2916
}

src/Servers/HttpSys/src/HttpSysListener.Log.cs

Lines changed: 17 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,70 +7,30 @@ namespace Microsoft.AspNetCore.Server.HttpSys;
77

88
internal partial class HttpSysListener
99
{
10-
private static class Log
10+
private static partial class Log
1111
{
12-
private static readonly Action<ILogger, Exception?> _listenerDisposeError =
13-
LoggerMessage.Define(LogLevel.Error, LoggerEventIds.ListenerDisposeError, "Dispose");
12+
[LoggerMessage(LoggerEventIds.ListenerDisposeError, LogLevel.Error, "Dispose", EventName = "ListenerDisposeError")]
13+
public static partial void ListenerDisposeError(ILogger logger, Exception exception);
1414

15-
private static readonly Action<ILogger, Exception?> _listenerDisposing =
16-
LoggerMessage.Define(LogLevel.Trace, LoggerEventIds.ListenerDisposing, "Disposing the listener.");
15+
[LoggerMessage(LoggerEventIds.ListenerDisposing, LogLevel.Trace, "Disposing the listener.", EventName = "ListenerDisposing")]
16+
public static partial void ListenerDisposing(ILogger logger);
1717

18-
private static readonly Action<ILogger, Exception?> _httpSysListenerCtorError =
19-
LoggerMessage.Define(LogLevel.Error, LoggerEventIds.HttpSysListenerCtorError, ".Ctor");
18+
[LoggerMessage(LoggerEventIds.HttpSysListenerCtorError, LogLevel.Error, ".Ctor", EventName = "HttpSysListenerCtorError")]
19+
public static partial void HttpSysListenerCtorError(ILogger logger, Exception exception);
2020

21-
private static readonly Action<ILogger, Exception?> _listenerStartError =
22-
LoggerMessage.Define(LogLevel.Error, LoggerEventIds.ListenerStartError, "Start");
21+
[LoggerMessage(LoggerEventIds.ListenerStartError, LogLevel.Error, "Start", EventName = "ListenerStartError")]
22+
public static partial void ListenerStartError(ILogger logger, Exception exception);
2323

24-
private static readonly Action<ILogger, Exception?> _listenerStarting =
25-
LoggerMessage.Define(LogLevel.Trace, LoggerEventIds.ListenerStarting, "Starting the listener.");
24+
[LoggerMessage(LoggerEventIds.ListenerStarting, LogLevel.Trace, "Starting the listener.", EventName = "ListenerStarting")]
25+
public static partial void ListenerStarting(ILogger logger);
2626

27-
private static readonly Action<ILogger, Exception?> _listenerStopError =
28-
LoggerMessage.Define(LogLevel.Error, LoggerEventIds.ListenerStopError, "Stop");
27+
[LoggerMessage(LoggerEventIds.ListenerStopError, LogLevel.Error, "Stop", EventName = "ListenerStopError")]
28+
public static partial void ListenerStopError(ILogger logger, Exception exception);
2929

30-
private static readonly Action<ILogger, Exception?> _listenerStopping =
31-
LoggerMessage.Define(LogLevel.Trace, LoggerEventIds.ListenerStopping, "Stopping the listener.");
30+
[LoggerMessage(LoggerEventIds.ListenerStopping, LogLevel.Trace, "Stopping the listener.", EventName = "ListenerStopping")]
31+
public static partial void ListenerStopping(ILogger logger);
3232

33-
private static readonly Action<ILogger, ulong, Exception?> _requestValidationFailed =
34-
LoggerMessage.Define<ulong>(LogLevel.Error, LoggerEventIds.RequestValidationFailed, "Error validating request {RequestId}");
35-
36-
public static void ListenerDisposeError(ILogger logger, Exception exception)
37-
{
38-
_listenerDisposeError(logger, exception);
39-
}
40-
41-
public static void ListenerDisposing(ILogger logger)
42-
{
43-
_listenerDisposing(logger, null);
44-
}
45-
46-
public static void HttpSysListenerCtorError(ILogger logger, Exception exception)
47-
{
48-
_httpSysListenerCtorError(logger, exception);
49-
}
50-
51-
public static void ListenerStartError(ILogger logger, Exception exception)
52-
{
53-
_listenerStartError(logger, exception);
54-
}
55-
56-
public static void ListenerStarting(ILogger logger)
57-
{
58-
_listenerStarting(logger, null);
59-
}
60-
61-
public static void ListenerStopError(ILogger logger, Exception exception)
62-
{
63-
_listenerStopError(logger, exception);
64-
}
65-
66-
public static void ListenerStopping(ILogger logger)
67-
{
68-
_listenerStopping(logger, null);
69-
}
70-
71-
public static void RequestValidationFailed(ILogger logger, Exception exception, ulong requestId)
72-
{
73-
_requestValidationFailed(logger, requestId, exception);
74-
}
33+
[LoggerMessage(LoggerEventIds.RequestValidationFailed, LogLevel.Error, "Error validating request {RequestId}", EventName = "RequestValidationFailed")]
34+
public static partial void RequestValidationFailed(ILogger logger, Exception exception, ulong requestId);
7535
}
7636
}

0 commit comments

Comments
 (0)