asp.net 核心上的 log4net
log4net on asp.net core
我有一个 asp.net 核心 2.2 解决方案。结构看起来像
我的项目
MyProject.Web
一切都在 MyProject 项目中,我只保留 web 用于声明。
我已将 Microsoft.Extensions.Logging.Log4Net.AspNetCore
引用添加到 MyProject.Web
我在 Startup.cs 中添加了 loggerFactory.AddLog4Net();
。我还在 MyProject.Web 中添加了 log4net.config 并设置为 Always Copy
。
我在 MyProject 项目调用 ServiceA
中有一个服务
public class ServiceA
{
private readonly ILogger logger;
public ServiceA(ILogger logger)
{
this.logger = logger;
}
}
然而,当我 运行 解决方案时,它崩溃并出现错误 HTTP Error 500.30 - ANCM In-Process Start Failure
。
当我从 ServiceA 的构造函数中删除 ILogger 时,项目 运行s。还有什么我在这里遗漏的吗?
您应该改为注入 strongly-typed 记录器:
public class ServiceA
{
private readonly ILogger logger;
public ServiceA(ILogger<ServiceA> logger)
{
this.logger = logger;
}
}
这是the documentation too中显示的简单场景。文档显示目标类型用作记录器的类别名称:
Get an ILogger object from DI.
使用控制器的类型名称作为
我也时常犯同样的错误,但我不记得异常是什么了。如果我没记错的话,是DI容器找不到ILogger实例。这是有道理的,因为扩展 register a strongly typed logger。 AddLogging
的源代码包含这一行:
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));
正如 ILogger< TCategoryName> 文档所解释的,这用于根据类型名称而不是字符串创建命名记录器:
A generic interface for logging where the category name is derived from the specified TCategoryName type name. Generally used to enable activation of a named ILogger from dependency injection.)
我有一个 asp.net 核心 2.2 解决方案。结构看起来像 我的项目 MyProject.Web
一切都在 MyProject 项目中,我只保留 web 用于声明。
我已将 Microsoft.Extensions.Logging.Log4Net.AspNetCore
引用添加到 MyProject.Web
我在 Startup.cs 中添加了 loggerFactory.AddLog4Net();
。我还在 MyProject.Web 中添加了 log4net.config 并设置为 Always Copy
。
我在 MyProject 项目调用 ServiceA
public class ServiceA
{
private readonly ILogger logger;
public ServiceA(ILogger logger)
{
this.logger = logger;
}
}
然而,当我 运行 解决方案时,它崩溃并出现错误 HTTP Error 500.30 - ANCM In-Process Start Failure
。
当我从 ServiceA 的构造函数中删除 ILogger 时,项目 运行s。还有什么我在这里遗漏的吗?
您应该改为注入 strongly-typed 记录器:
public class ServiceA
{
private readonly ILogger logger;
public ServiceA(ILogger<ServiceA> logger)
{
this.logger = logger;
}
}
这是the documentation too中显示的简单场景。文档显示目标类型用作记录器的类别名称:
Get an ILogger object from DI.
使用控制器的类型名称作为
我也时常犯同样的错误,但我不记得异常是什么了。如果我没记错的话,是DI容器找不到ILogger实例。这是有道理的,因为扩展 register a strongly typed logger。 AddLogging
的源代码包含这一行:
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));
正如 ILogger< TCategoryName> 文档所解释的,这用于根据类型名称而不是字符串创建命名记录器:
A generic interface for logging where the category name is derived from the specified TCategoryName type name. Generally used to enable activation of a named ILogger from dependency injection.)