所以我的webapi解决方案适用于多个租户,我希望日志记录是这样的:
2018-05-09 11:06:00,490((tenantId))[12] INFO方法名称 - 日志
2018-05-09 11:07:00,490((如果在租户级别呼叫不是,则为默认值))[12]警告方法名称 - 日志
我解决这个问题的想法是使用
手动添加tenantIdlog4net.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需要等待,但我无法初始化任务(异步)方法。
答案 0 :(得分:0)
我最终在不调用args=(1, 2)
x=1, y=2
arg_dict[0]=(1, 2)
args=((1, 2),)
Traceback (most recent call last):
File "c:\Users\name\Documents\pname\test.py", line 28, in <module>
myfun(arg_dict[0])
File "c:\Users\name\Documents\pname\test.py", line 21, in myfun
x, y = args
ValueError: not enough values to unpack (expected 2, got 1)
的情况下解析await SetTenantIdentifier(tenantIdentifier);
,但它不起作用,await
将在控制器日志上返回null但在基本控制器中工作(因为它正在改变调用之间的线程)
2018-05-10 13:59:21,289(租客)[8] INFO - 基本控制器 - 租户标识符设置为租户
2018-05-10 13:59:21,504((null))[12] INFO - 测试控制器 - 来自控制器的嗨
所以我使用了Log4net.ThreadContext.Properties["tenantId"] = tenantIdentifier;
而不是Log4net.LogicalThreadContext.Properties["tenantId"] = tenantIdentifier;
,而且效果很好。