【问题标题】:Suppressing Console Logging by Azure KeyVault通过 Azure KeyVault 抑制控制台日志记录
【发布时间】:2018-01-12 18:07:42
【问题描述】:

我正在使用 C# 在 Net Core 2 控制台应用程序中访问 Azure 密钥保管库。每当应用程序运行时,当我从保管库中检索秘密时,控制台窗口就会收到类似这样的消息:

2017-12-26T18:03:49.8610049Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - AcquireTokenHandlerBase.cs:带有程序集版本的 ADAL PCL.CoreCLR “3.17.3.35304”,文件版本“3.17.41219.2324”和信息 版本“b6afaeae7cff965e66649e0ee7e8c29071d5a7e6”正在运行... 2017-12-26T18:03:49.8621855Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - AcquireTokenHandlerBase.cs: === 令牌获取开始: 权限:https://login.windows.net/[...]/ 资源:https://vault.azure.net 客户编号:[...] 缓存类型:空 认证目标:客户端

2017-12-26T18:03:49.8981211Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - AcquireTokenHandlerBase.cs:从缓存中加载。

2017-12-26T18:03:49.9010018Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - TokenCache.cs:在缓存中查找令牌...

2017-12-26T18:03:49.9060990Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - TokenCache.cs: 在缓存中没有找到匹配的令牌

2017-12-26T18:03:50.2185881Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - TokenCache.cs:正在缓存中存储令牌...

2017-12-26T18:03:50.2211369Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - TokenCache.cs:缓存中存储了一个项目

2017-12-26T18:03:50.2351165Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - AcquireTokenHandlerBase.cs: === 令牌获取完成 成功地。访问令牌已重新调整:

    Access Token Hash: [...]
    Expiration Time: 12/26/2017 7:03:49 PM +00:00
    User Hash: null

我不记得在我的代码中为密钥保管库访问设置任何类型的日志记录。但是,我已经在整个应用程序中配置了 Serilog 的 ILogger,所以可能会以某种方式使用它。

如何禁止显示这些消息?

【问题讨论】:

  • 你看过adding a filter吗?
  • 如果没有更多“直接”答案,我会尝试。我不确定我在控制台窗口中看到的消息是通过 Serilog 发送的,或者它们是否通过其他机制到达那里。
  • 对不起,一年没写代码,我的C# foo 不强了。我认为所有 Microsoft 提供的 .NET dll 都将识别并读取配置文件(如果放在它们旁边),并且我知道有一种标准方法可以通过其中的 XML 调整诊断输出。不知道这是否适用于 Serilog。

标签: c# azure azure-keyvault


【解决方案1】:

根据你的描述,我查了Microsoft.Azure.KeyVault的源码,没有找到相关的日志。

2017-12-26T18:03:49.8610049Z: 29c98a86-9e1d-4a5d-86d6-daf8f2cfdc56 - AcquireTokenHandlerBase.cs: ADAL PCL.CoreCLR 与程序集版本' 3.17.3.35304',文件版本'3.17.41219.2324'和信息版本

根据日志信息,我尝试利用ILSpy对包Microsoft.IdentityModel.Clients.ActiveDirectory进行反编译,发现如下代码:

您可以通过以下代码禁用 ADAL 库下的跟踪日志记录:

LoggerCallbackHandler.UseDefaultLogging = false;

测试:

【讨论】:

  • @Bruce_Chen,这是我很长时间以来在 stackoverflow 上看到的最了不起的答案。如果我可以奖励不止一颗星或竖起大拇指,我会这样做。谢谢!我会>>从来没有
【解决方案2】:

对于Microsoft.IdentityModel.Clients.ActiveDirectory2.x 版本,您需要调用它:

using Microsoft.IdentityModel.Clients.ActiveDirectory;

AdalTrace.LegacyTraceSwitch.Level = TraceLevel.Error;

对于版本 3.x+ 使用 Bruce_Chen 的回答:

LoggerCallbackHandler.UseDefaultLogging = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多