以下代码使用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
如果有比我正在做的更聪明的方法,请随时提供。
答案 0 :(得分:1)
你没有“传入”ILogger,你传递的lambda可以随意做任何事情。
您可以执行以下操作:
Audit(ILogger logger, Action<ILogger> action)
{
action(logger);
}
Audit(_logger, x => x.Information(...));
或者,如果AuditLogger是独立构建的,您可以将_logger传递给构造函数,只传入方法中的操作。