我正在研究一个简单的Blob触发器,该触发器将Blob存储中的CSV文件导入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发布时我的功能都没有消失,那也很好。
如果有人花时间帮助我,我真的很高兴。
答案 0 :(得分:1)
如果您在azure函数的应用程序设置中正确配置了APPINSIGHTS_INSTRUMENTATIONKEY
,则ILogger将自动将数据写入应用程序见解。
假设您是从Visual Studio-> azure函数模板创建azure函数(v2),我在Function.cs中编写如下代码:
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace MyFunctionApp3
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([BlobTrigger("f22/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes !!!");
log.LogTrace("this is a trace info from ilogger !!!");
log.LogInformation("this is a information from ilogger!!!");
}
}
}
您还可以通过将以下代码添加到host.json文件来控制日志级别:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"default": "Trace",
"Host.Results": "Error",
"Function": "Trace",
"Host.Aggregator": "Trace"
}
}
}
然后将其发布为天蓝色。
成功将其发布到Azure之后,请导航到Azure门户->您的功能应用程序->应用程序设置:添加字段APPINSIGHTS_INSTRUMENTATIONKEY
及其值。然后点击保存。如下所示:
然后,您可以将文件上传到blob存储,然后转到azure功能日志控制台,您可以看到ILogger编写的日志在其中:
最后,导航至azure门户->您的应用程序见解->搜索页面,然后单击刷新按钮,您将看到显示了由ILogger编写的日志(可能需要几分钟):
如有任何疑问,请告诉我。