在 Azure webJob 中使用 ILogger 进行 DI
DI with ILogger in Azure webJob
我有一个在 .net Framework 4.6 中创建的 azure webjob 项目。我正在尝试使用 ILogger 实现依赖注入并将信息记录在应用程序洞察中。
class Program
{
private static IConfigurationRoot configuration;
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
public static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
IServiceCollection serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
//config.JobActivator = new CustomJobActivator(serviceCollection.BuildServiceProvider());
config.LoggerFactory = new LoggerFactory()
.AddApplicationInsights(configuration.GetSection("ApplicationInsights")["InstrumentationKey"], null);
config.UseTimers();
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
private static void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient<Functions, Functions>();
serviceCollection.AddLogging();
}
}
appSettings.json
{
"ApplicationInsights": {
"InstrumentationKey": "8028437c-888-666-444-2cf3777106a8"
}
}
Functions.cs
public class Functions
{
private readonly ILogger<Functions> _logger;
public Functions(ILogger<Functions> logger)
{
_logger = logger;
}
public void ProcessTimerMessage([TimerTrigger("0 */5 * * * *")]TimerInfo timerInfo, TextWriter log)
{
//LOG THIS IN APP INSIGHTS
_logger.LogError("Error");
}
}
我还尝试在 ConfigureServices 方法中添加以下代码。但是还是不行。
var telemetryClient = new TelemetryClient(new TelemetryConfiguration()
{
InstrumentationKey = "<< Instrumentation Key >>"
});
serviceCollection.AddSingleton(x => telemetryClient).AddLogging();
应用洞察中仅记录跟踪日志,而不会显示记录器对象日志。
请帮助
我从 vs web 作业模板创建了一个 webjob 项目,.net framework 4.6.1,步骤如下:
第一步:创建项目
第 2 步:安装以下软件包:
Install-Package Microsoft.Azure.WebJobs -version 2.2.0
Install-Package Microsoft.Extensions.Logging -version 2.0.1
Install-Package Microsoft.Extensions.Logging.Console -version 2.0.1
Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -version 2.2.0
Install-Package System.Configuration.ConfigurationManager -version 4.4.1
第 3 步:在 app.config 中添加以下内容:
第 4 步:我的 program.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Configuration;
namespace WebJob7
{
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
var instrumentationKey =
ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
config.DashboardConnectionString = "";
config.LoggerFactory = new LoggerFactory()
.AddApplicationInsights(instrumentationKey, null)
.AddConsole();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
host.RunAndBlock();
}
}
}
第 5 步:我的代码在 Function.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace WebJob7
{
public class Functions
{
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
{
//you can directly use this line of code.
//logger.LogError(new Exception(),"it is a test error...");
//or use the following code
try
{
int i = int.Parse("123er");
}
catch(Exception ex)
{
logger.LogError(ex,"it's a exception here 0927..........");
}
}
}
}
执行后,日志显示在 azure portal -> go as Exception:
点击查看详情:
我有一个在 .net Framework 4.6 中创建的 azure webjob 项目。我正在尝试使用 ILogger 实现依赖注入并将信息记录在应用程序洞察中。
class Program
{
private static IConfigurationRoot configuration;
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
public static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
IServiceCollection serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
//config.JobActivator = new CustomJobActivator(serviceCollection.BuildServiceProvider());
config.LoggerFactory = new LoggerFactory()
.AddApplicationInsights(configuration.GetSection("ApplicationInsights")["InstrumentationKey"], null);
config.UseTimers();
var host = new JobHost(config);
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
private static void ConfigureServices(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient<Functions, Functions>();
serviceCollection.AddLogging();
}
}
appSettings.json
{
"ApplicationInsights": {
"InstrumentationKey": "8028437c-888-666-444-2cf3777106a8"
}
}
Functions.cs
public class Functions
{
private readonly ILogger<Functions> _logger;
public Functions(ILogger<Functions> logger)
{
_logger = logger;
}
public void ProcessTimerMessage([TimerTrigger("0 */5 * * * *")]TimerInfo timerInfo, TextWriter log)
{
//LOG THIS IN APP INSIGHTS
_logger.LogError("Error");
}
}
我还尝试在 ConfigureServices 方法中添加以下代码。但是还是不行。
var telemetryClient = new TelemetryClient(new TelemetryConfiguration()
{
InstrumentationKey = "<< Instrumentation Key >>"
});
serviceCollection.AddSingleton(x => telemetryClient).AddLogging();
应用洞察中仅记录跟踪日志,而不会显示记录器对象日志。 请帮助
我从 vs web 作业模板创建了一个 webjob 项目,.net framework 4.6.1,步骤如下:
第一步:创建项目
第 2 步:安装以下软件包:
Install-Package Microsoft.Azure.WebJobs -version 2.2.0
Install-Package Microsoft.Extensions.Logging -version 2.0.1
Install-Package Microsoft.Extensions.Logging.Console -version 2.0.1
Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -version 2.2.0
Install-Package System.Configuration.ConfigurationManager -version 4.4.1
第 3 步:在 app.config 中添加以下内容:
第 4 步:我的 program.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Configuration;
namespace WebJob7
{
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
var instrumentationKey =
ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
config.DashboardConnectionString = "";
config.LoggerFactory = new LoggerFactory()
.AddApplicationInsights(instrumentationKey, null)
.AddConsole();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost(config);
host.RunAndBlock();
}
}
}
第 5 步:我的代码在 Function.cs:
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
namespace WebJob7
{
public class Functions
{
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
{
//you can directly use this line of code.
//logger.LogError(new Exception(),"it is a test error...");
//or use the following code
try
{
int i = int.Parse("123er");
}
catch(Exception ex)
{
logger.LogError(ex,"it's a exception here 0927..........");
}
}
}
}
执行后,日志显示在 azure portal -> go as Exception:
点击查看详情: