In most logging frameworks, it’s good practice to set the logger name to match its enclosing type, as enforced by S3416.
Logging frameworks can define or use Generic interfaces for the
logger, such as ILogger<TCategoryName>
.
The use of a logger of a generic type parameter A
(e.g. ILogger<A>
) in a type different than A
, say
B
, goes against the convention.
Because the instance of type A
would log with a logger named after B
, log items would appear as if they were logged by
B
instead, resulting in confusion and logging misconfiguration:
- overriding defaults for the logger named after
A
would not take effect for entries logged in the type A
- fine-graned logging configuration would not be possible, since there would be no way to distinguish entries logged in the type
A
from entries logged in the type B
Further details and examples are provided in S3416.
This rule specifically targets the generic logging interface ILogger<TCategoryName>
Interface
defined by Microsoft Extensions Logging.