【问题标题】:azure function not logging exceptions to application insight天蓝色函数未将异常记录到应用程序洞察力
【发布时间】:2018-12-28 01:47:41
【问题描述】:

我有具有服务总线主题触发器的天蓝色功能。我注意到,当函数毫无例外地执行时,所有 tracewriter.loginformation 消息都会正确显示在应用程序洞察力中。但如果发生任何异常,则在 appinsights 中会显示 nighther log.information 也不显示 log.error

我的函数在消费计划下运行。我注意到我有 2 个 catch 块。

catch(validation ex) 
{
    log.error;
} 
catch(exception ex) 
{ 
   log.error; 
   throw;
} 

第一个 catch 块中的所有错误都被记录,但第二个 catch 块中的所有错误都没有被记录。我注释掉了 throw 并且它开始记录到 appinsights .. 但我需要 throw 进行死信处理。请指教。

 <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
    <Version>1.6.15</Version>
    <DependsOnNETStandard>netstandard1.5</DependsOnNETStandard>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <WarningsAsErrors />
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="2.1.0-beta1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="1.0.0-beta1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.ServiceBus" Version="2.1.0-beta1" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.0-alpha6" />
    <PackageReference Include="System.IO" Version="4.1.0" />
    <PackageReference Include="System.Runtime" Version="4.1.0" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
  <ItemGroup>
    <Compile Update="TemplateResource.Designer.cs">
      <DesignTime>True</DesignTime>
      <AutoGen>True</AutoGen>
      <DependentUpon>TemplateResource.resx</DependentUpon>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Update="TemplateResource.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>TemplateResource.Designer.cs</LastGenOutput>
    </EmbeddedResource>
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Properties\PublishProfiles\" />
  </ItemGroup>
</Project>

【问题讨论】:

  • 第二个catch块中的日志错误部分是否完全一样?还是那里有其他东西引发另一个异常或导致该异常未被记录的东西。看起来它应该可以工作,假设您的代码的日志部分在两个分支中完全相同相同。
  • 我们尝试重现,它按预期工作。 Krishna,您能否提供以下详细信息:基本代码 sn-p、.NET 版本、Microsoft.NET.Sdk.Functions 和 Microsoft.Azure.WebJobs.ServiceBus 包
  • @ZakiMa 我更新了项目设置详细信息。我注意到,当我从本地调试时,消息会记录在应用程序洞察中。但是当部署在消费计划中时,它无法正常工作,直到我删除“throw”

标签: azure azure-application-insights


【解决方案1】:

我已尝试使用您的版本重现它,但它仍然适用于我。

try
{
    if (new Random().NextDouble() > 0.5)
    {
        throw new ArgumentNullException("null");
    }

    throw new Exception("some exception");
}
catch (ArgumentNullException)
{
    log.Error("null");
}
catch (Exception e)
{
    log.Error("some exception");
    throw;
}

我在 Application Insights 中同时看到:“null”和“一些异常”。

顺便说一句,已经有稳定的 Microsoft.NET.Sdk.Functions 1.0.14,它应该包括自 1.0.0-alpha6 以来的许多修复。

【讨论】:

  • 好的,谢谢,我会再次监控它.. sdk 的 1.0.14 对 newtonsoft 9.0.1 有很强的依赖关系,它破坏了我们的文件未找到错误的功能..
【解决方案2】:

我遇到了类似的问题,log.Error("my error message") 总是导致 Application Insights 中出现跟踪而不是异常(这是我想要的)。检查 Application Insights SDK 的源代码后,很明显要在 Application Insights 中获取异常,您必须将异常对象传递给 LogError 调用。

示例:

log.Error(ex, "my error message") - will result in Application Insight Exception

log.Error("my error message") - will result in Application Insight Trace

【讨论】:

  • 好朋友,我也叫错了,它使用了不同的重载方法
猜你喜欢
  • 2018-08-15
  • 2020-05-22
  • 2018-10-24
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多