San*_*ket 14 serilog asp.net-core-mvc asp.net-core
我试图在ASP.NET核心应用程序(.NET框架)中实现SeriLog
以下是我目前执行的步骤 -
1)在Project.json中添加了以下引用
"Serilog": "2.2.0",
"Serilog.Extensions.Logging": "1.2.0",
"Serilog.Sinks.RollingFile": "2.0.0",
"Serilog.Sinks.File": "3.0.0"
Run Code Online (Sandbox Code Playgroud)
2)在Startup类的构造函数中添加以下行 -
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.RollingFile(Path.Combine(env.ContentRootPath, "log-{Date}.txt"))
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
3)在Startup类的configure方法中添加以下行 -
loggerFactory.AddSerilog();
Run Code Online (Sandbox Code Playgroud)
4)将记录器注入HomeController,如下所示 -
ILogger logger;
public HomeController(ILogger logger)
{
this.logger = logger;
}
Run Code Online (Sandbox Code Playgroud)
5)在About操作中,尝试记录此类异常 -
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
try
{
throw new Exception("Serilog Testing");
}
catch (System.Exception ex)
{
this.logger.Error(ex.Message);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
在运行我的应用程序时,我收到以下错误 -
System.InvalidOperationException:尝试激活'AspNetCore_SeriLog_trial1.Controllers.HomeController'时,无法解析类型'Serilog.ILogger'的服务.在Microsoft.AspNetCore.Mvc.Internal.TypeActivatorCache.CreateInstance
[TInstance]的lambda_method(Closure,IServiceProvider,Object [])上的Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp,Type type,Type requiredBy,Boolean isDefaultParameterRequired)IServiceProvider serviceProvider,Type implementationType),位于Microsoft.AspNetCore.Mvc.Inv.Inter.ControllerActionInvoker.d__26的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerFactory.CreateController(ControllerContext context)中的Microsoft.AspNetCore.Mvc.Controllers.DefaultControllerActivator.Create(ControllerContext controllerContext). .MoveNext()
有人可以帮我这个吗?Serilog缺少任何配置?
dot*_*tep 26
尝试在控制器中执行以下操作.
ILogger<HomeController> logger = null;
public HomeController(ILogger<HomeController> _logger)
{
logger = _logger;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*llo 11
如果您需要使用ILogger
(from Serilog
) 而不是ILogger<HomeController>
(from Microsoft.Extensions.Logging
),您可以ILogger
在 Startup 类上注册:
services.AddSingleton(Log.Logger);
Run Code Online (Sandbox Code Playgroud)
您的控制器中有以下哪两行?
using Serilog;
using Microsoft.Extensions.Logging;
Run Code Online (Sandbox Code Playgroud)
如果是前者 ( using Serilog;
) 那么那可能是你的问题。
当您注册服务时,您实际上是在说“当构造函数要求 Microsoft.Extensions.Logging.ILogger 时,向它们传递一个 Serilog 实例,因为我正在使用 Serilog 进行日志记录”,但是在您的构造函数中,您不是' t 要求 Microsoft.Extensions.Logging.ILogger,您要求Serilog.ILogger并且您的应用程序变得混乱,因为您还没有定义要注入的服务Serilog.ILoger
,您已经定义了一个 forMicrosoft.Extensions.Logging.ILogger
请记住,您正在实现 Microsoft 的 ILogger 接口:您的构造函数不需要知道您正在使用 Serilog……事实上,您并不希望它知道!重点是您可以随时将 Serilog 换成不同的记录器,而无需更改代码。
在构造函数中更改using Serilog;
为using Microsoft.Extensions.Logging;
,您将请求正确的服务类型
归档时间: |
|
查看次数: |
10190 次 |
最近记录: |