- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将异常记录到 Application Insights。我通过直接调用 TelemetryClient.TrackException
成功地做到了这一点。但是,我想在我的代码中对此进行抽象,以防将来我想登录到其他平台,因此我只想坚持使用 ILogger 接口(interface)。
我发现您可以使用 ILoggerFactory.AddApplicationInsights
(已实现 here),但无论我做了什么,我都没有看到日志显示在 ApplicationInsights 中。
下面是我的代码:
Startup.cs
IConfigurationRoot Configuration { get; set; }
ILoggerFactory LoggerFactory { get; set; }
IServiceProvider ServiceProvider { get; set; }
public Startup( IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory )
{
this.LoggerFactory = loggerFactory;
string configurationFilePath = "abc.json";
this.Configuration = new ConfigurationBuilder()
.SetBasePath( hostingEnvironment.ContentRootPath )
.AddJsonFile( configurationFilePath, optional: true, reloadOnChange: true )
.AddEnvironmentVariables()
.Build();
}
public void Configure(
IApplicationBuilder applicationBuilder,
IHostingEnvironment hostingEnvironment,
ILoggerFactory loggerFactory,
IServiceProvider serviceProvider )
{
this.ServiceProvider = serviceProvider;
loggerFactory.AddApplicationInsights( serviceProvider );
applicationBuilder.UseMvc();
}
public void ConfigureServices( IServiceCollection services )
{
services.AddApplicationInsightsTelemetry( this.Configuration );
services.AddMvc( .... // A bunch of options here ... )
}
然后,我尝试像这样在我的 Controller 中使用它:
ILogger<XController> Logger { get; set; }
public XController( ILogger<XController> logger )
{
this.Logger = logger;
}
[HttpPost]
[Route( "v3.0/abcd" )]
public async Task PostEvent( [FromBody] XEvent xEvent )
{
this.Logger.LogError( 0, new Exception( "1234" ), "1234" );
}
但是,我根本没有看到与请求相关的任何异常。如果我用 TelemetryClient.TrackException
替换 Logger.LogError
行(并首先创建 TelemetryClient
),那么我可以毫无问题地看到异常.
我不知道我做错了什么。有人能帮忙吗?
最佳答案
根据您的描述,我建议您尝试使用以下代码启用 ILogger 将错误记录到 ApplicationInsights。
您可以直接使用 loggerFactory.AddApplicationInsights() 方法来启用 ApplicationInsights ILogger。
更多细节,你可以引用下面的代码:
启动类:
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddApplicationInsightsTelemetry(Configuration);
// Add framework services.
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddApplicationInsights(app.ApplicationServices,LogLevel.Warning);
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
appsettings.json:
{
"ApplicationInsights": {
"InstrumentationKey": "yourkey"
}
}
结果:
更新:
在搜索功能中找到的记录。
关于c# - 将 Application Insights 与 ILoggerFactory 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022693/
创建 ILogger在扩展方法中,我存储了一个 ILoggerFactory在静态类中 public static class ApplicationLogging { public stat
我将我的项目升级到 .NET Core 2.2.x 并收到关于以下代码的过时警告 - 两行: public void Configure(IApplicationBuilder app,
我使用 C# 创建了一个简单的 Azure 函数,我想为其他类库实现 ILoggerFactory。这是我的代码。 MyFunction => Class1 => Class2 namespace F
我想将 Microsoft.Extensions.Logging 与 DryIoc 容器一起使用。 默认方式是将工厂注册为实例,注入(inject)并创建记录器: ILoggerFactory log
我有一个需要无参数构造函数的现有类。我想记录一个错误和其中的一些其他数据。在我的应用程序的其他任何地方,我都将 ILoggerFactory 放在我的构造函数中,DI 会处理它,因此我可以记录等等。由
private ILoggerFactory ConfigureLogging(ILoggerFactory factory) { factory.AddConsole();
我已阅读 this但它适用于 asp.net 核心。我的以下代码适用于非网络 控制台应用程序。 Visual Studio 告诉我 AddConsole(this ILoggerFactory,...
我正在尝试将 NLog 作为提供程序添加到我的 startup.cs 文件中的记录器工厂,但我似乎无法添加它。我见过的所有例子都是这样做的: loggerFactory.AddNLog(new glo
上周将我的 Windows 服务应用程序部署到生产环境失败,所以我尝试在本地以 Release模式运行该项目并得到 InvalidOperationException: Can not determi
在我新的 asp.net 5 应用程序中,我有这个错误: Could not load file or assembly 'Microsoft.Framework.Logging.ILoggerFac
我正在尝试将异常记录到 Application Insights。我通过直接调用 TelemetryClient.TrackException 成功地做到了这一点。但是,我想在我的代码中对此进行抽象,
我正在尝试写入 .netcore/c# 中的自定义事件源,但还没有找到指定 .net core 记录器对象的目标源的方法。在这种情况下,我想写入“我的事件日志”而不是应用程序日志。下面的代码成功写入应
大家 我正在尝试对我的代码进行单元测试,但是我无法让 ILoggerFactory 工作 这是我的单元测试代码(可能不正确): using NUnit.Framework; using Microso
大家 我正在尝试对我的代码进行单元测试,但是我无法让 ILoggerFactory 工作 这是我的单元测试代码(可能不正确): using NUnit.Framework; using Microso
我的 asp.net core 2.x 应用程序有典型的日志记录要求: 在生产中使用应用洞察力, 在开发环境中控制台和调试记录器 根据类别和日志级别设置一些过滤器 现在我看到至少三个不同的 API 来
MS 文档文章 "Introduction to Logging in ASP.NET Core"给出了2个构造函数注入(inject)的例子 使用ILogger private readonly I
这可能与Pass ILogger or ILoggerFactory to constructors in AspNet Core?有点关系,但是这是专门针对库设计的,而不是关于使用这些库的实际应用程
我正在尝试在 Eclipse 项目中使用 log4j.2.x 进行日志记录。我命名为 log4j2.xml 的 conf 文件直接在 java 项目下,我在类路径中有必要的 jars。测试时,我看到以
我使用 asp.net core 1.1 组合了一个简单的控制台应用程序。我设置了 Kestrel 托管并使用了一个 Configure 方法来注入(inject)IApplicationBuilde
我正在处理一个使用简单注入(inject)器作为依赖注入(inject)器的项目。另一方面,该项目使用 Microsoft.Extensions.Logging 来记录某些类中发生的事件。 我的技术问
我是一名优秀的程序员,十分优秀!