Итак, мое решение webapi работает с несколькими арендаторами, и я хочу, чтобы логирование было примерно таким:
2018-05-09 11: 06: 00,490 ((tenantId)) [12] Имя метода INFO - журналы
2018-05-09 11: 07: 00,490 ((значение по умолчанию, если вызов не на уровне арендатора)) [12] имя метода предупреждения - журналы
Моя идея для решения проблемы состояла в том, чтобы добавить tenantId вручную, используя
log4net.ThreadContext.Properties["tenantId"] = tenantId;
Но опять же, у меня нет доступа к tenantId на каждом уровне решения. Я пытался добавить его в свой базовый контроллер (который реализует ApiController) выглядит так
protected override void Initialize(HttpControllerContext
controllerContext)
{
var tenantIdentifier =
requestUtils.GetTenantHeader(controllerContext.Request);
if (tenantIdentifier != null)
log4net.ThreadContext.Properties["tenantId"] = tenantIdentifier;
else
log4net.ThreadContext.Properties["tenantId"] = "default";
await SetTenantIdentifier(tenantIdentifier);
base.Initialize(controllerContext);
}
Проблема этой идеи заключается в том, что для меня setTenantId нужно подождать, но я не могу сделать метод Initialize a Task (async).