【发布时间】:2019-07-21 08:53:36
【问题描述】:
我正在开发一个简单的 Blob 触发器,该触发器将 CSV 文件从 blob 存储转换为 SQL。
我的函数的功能正在运行,但我想在 Azure 中添加 Application Insights 以便能够获取有关异常和日志记录信息的通知。我只是无法绕过它。 我已经在谷歌上搜索了几天并阅读了大量文章,但似乎找不到任何有用的东西。我是 Azure 和一般编程的新手,所以很难理解其中的一些示例。
我在门户中的函数中添加了 Application Insights,并将 Instrumentationkey 添加到函数中的 appsettings 中。当我在函数中使用 Tracewriter 时,我可以发布它并且函数正在运行(除了 Application Insights 已死)。
当我改为使用 ILogger(推荐)并发布时,我的 Application Insights 中的信息为零,而且我的功能根本无法工作。
我读过一篇文章说您可以将 Application Insights 和 istrumentationkey 添加到您的函数中,然后添加一个 nuget-package 并且它会起作用。而另一篇文章有一些复杂的例子,他们在 startup.cs 类中构建了一些东西。只是有很多不同的信息,我没有经验知道我的特定应用程序是对还是错。
我的函数目前看起来像这样(.NET Core 2.1):
public static class BlobTrigger
{
[FunctionName("BlobToSql")]
public static async Task Run([BlobTrigger("myblobstorage", Connection = "AzureWebJobsStorage")]
CloudBlockBlob blob, ILogger log)
{
Exception exception = null;
log.LogInformation($"BlobTrigger processed a request for blob: {blob.Name}");
var csvToSqlHandler = new CsvToSqlHandler();
if (!blob.Name.EndsWith(".CSV"))
{
log.LogError(($"Blob '{blob.Name}' doesn't have the .csv extension. Skipping processing."));
return;
}
try
{
var dataTable = await csvToSqlHandler.CreateDataTableFromCsv(blob);
csvToSqlHandler.FormatDataTable(dataTable, blob.Name);
csvToSqlHandler.FormatDataTableColumns(dataTable, blob.Name);
await csvToSqlHandler.DataTableToSql(dataTable, blob.Name);
}
catch (Exception e)
{
exception = e;
log.LogError($"{blob.Name} failed. Exception: {exception.Message}");
}
if (exception == null)
{
await blob.DeleteAsync();
}
log.LogInformation($"Blob '{blob.Name}' successfully executed!");
}
}
使用这个:
using System;
using System.Threading.Tasks;
using BlobToSqlConverter.Handlers;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;
我只是想在 Azure 上的 Application Insights 中查看一些日志,我很高兴,如果我的函数在每次使用 ILogger 发布时都不会死,那也很好。
如果有人花时间帮我解决这个问题,我会非常感激。
【问题讨论】:
标签: .net azure azure-blob-storage azure-application-insights