确保 Action 上的类型以实现 ILogger 类型
Ensure the type on the Action to implement type ILogger
以下代码使用 using 语句包装对 Serilog 日志记录的调用以修饰调用。我希望确保只能在 Action 中传递 ILogger 类型。
_logger 实现 ILogger。
public class AuditLogger : IAuditLogger
{
public void Audit(Action logger)
{
using (LogContext.PushProperty("EventType", "Audit"))
{
logger.Invoke();
}
}
}
_auditLogger.Audit(()=>_logger.Information("Edit User {UserId}",id));
//_auditLogger implements ILogger
如果有比我正在做的更聪明的方法,请随时提供。
你不是 "passing in" ILogger,你传递的是一个可以做任何随机事情的 lambda。
你可以这样做:
Audit(ILogger logger, Action<ILogger> action)
{
action(logger);
}
Audit(_logger, x => x.Information(...));
或者,如果 AuditLogger 是独立构建的,您可以将 _logger 传入构造函数,并将操作传入方法。
以下代码使用 using 语句包装对 Serilog 日志记录的调用以修饰调用。我希望确保只能在 Action 中传递 ILogger 类型。 _logger 实现 ILogger。
public class AuditLogger : IAuditLogger
{
public void Audit(Action logger)
{
using (LogContext.PushProperty("EventType", "Audit"))
{
logger.Invoke();
}
}
}
_auditLogger.Audit(()=>_logger.Information("Edit User {UserId}",id));
//_auditLogger implements ILogger
如果有比我正在做的更聪明的方法,请随时提供。
你不是 "passing in" ILogger,你传递的是一个可以做任何随机事情的 lambda。
你可以这样做:
Audit(ILogger logger, Action<ILogger> action)
{
action(logger);
}
Audit(_logger, x => x.Information(...));
或者,如果 AuditLogger 是独立构建的,您可以将 _logger 传入构造函数,并将操作传入方法。