In most logging frameworks, it’s good practice to set the logger name to match its enclosing type, as enforced by {rule:csharpsquid: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:
A would not take effect for entries logged in the type A A
from entries logged in the type B Further details and examples are provided in {rule:csharpsquid:S3416}.
This rule specifically targets the generic logging interface ILogger<TCategoryName> Interface
defined by Microsoft Extensions Logging.
Change the generic type parameter of the ILogger interface to match the enclosing type.
class EnclosingType
{
public EnclosingType(ILogger<AnotherType> logger) // Noncompliant
{
// ...
}
}
class EnclosingType
{
public EnclosingType(ILogger<EnclosingType> logger) // Compliant
{
// ...
}
}
ILogger<TCategoryName> Interface