确保Action上的类型实现类型ILogger

时间:2016-09-02 05:22:01

标签: c# serilog

以下代码使用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

如果有比我正在做的更聪明的方法,请随时提供。

1 个答案:

答案 0 :(得分:1)

你没有“传入”ILogger,你传递的lambda可以随意做任何事情。

您可以执行以下操作:

Audit(ILogger logger, Action<ILogger> action)
{
   action(logger);
}

Audit(_logger, x => x.Information(...));

或者,如果AuditLogger是独立构建的,您可以将_logger传递给构造函数,只传入方法中的操作。