c# - 使用 AddTraceSource 的 dotnet 核心日志记录不起作用
问题描述
调试日志正在工作,但我无法让 TraceSource 工作。
这应该很简单吧?:)
我的“AppSettings.json”看起来像这样......
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information"
},
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"LogLevel": {
"Default": "Information"
}
}
}
我Startup
的长这样...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddDebug();
// add Trace Source logging
SourceSwitch sourceSwitch = new SourceSwitch("sourceSwitch", "Logging Sample")
{
Level = SourceLevels.Information
};
loggerFactory.AddTraceSource(sourceSwitch, new TextWriterTraceListener(@"C:\temp\trace.log"));
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
我的示例控制器看起来像那样......
[Route("[controller]")]
public class ValuesController : Controller
{
private readonly ILogger<ValuesController> _logger;
private readonly ILogger _logger2;
public ValuesController(ILogger<ValuesController> logger, ILoggerFactory loggerFactory)
{
_logger = logger;
_logger2 = loggerFactory.CreateLogger("sourceSwitch");
}
// GET api/values
[HttpGet]
public async Task Get()
{
string myName = "demo";
_logger.LogError($"{myName} started.");
_logger2.LogError($"logger2 {myName} started.");
await Task.Delay(1000);
_logger.LogInformation($"{myName} finished.");
}
}
不幸的是,没有文件被写入(到)。
文件权限不是问题。我可以File.AppendAllText()
毫无问题地使用。
我也找不到任何关于SourceSwitch
它的名字和重要性的有意义的文档。我基本上遵循了这里列出的官方文档:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.1#tracesource-provider
解决方案
因为AddTraceSource
,它不支持,如果你想使用.NET Core
,你需要将你的项目定位到。 .NET Framework
AddTraceSource
要使用此提供程序,应用程序必须在 .NET Framework(而不是 .NET Core)上运行。提供程序允许您将消息路由到各种侦听器,例如示例应用程序中使用的 TextWriterTraceListener。
参考: TraceSource 提供程序
要检查此行为,您可以尝试按照以下步骤操作:
编辑 csproj
<TargetFramework>net47</TargetFramework>
由于
Microsoft.AspNetCore.All
与net47不兼容,直接引用需要的reference:<ItemGroup> <PackageReference Include="FluentValidation.AspNetCore" Version="7.5.0" /> <!--<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />--> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.0.6" /> <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" /> <PackageReference Include="Moq" Version="4.8.3" /> <PackageReference Include="System.ServiceModel.Duplex" Version="4.4.*" /> <PackageReference Include="System.ServiceModel.Http" Version="4.4.*" /> <PackageReference Include="System.ServiceModel.NetTcp" Version="4.4.*" /> <PackageReference Include="System.ServiceModel.Security" Version="4.4.*" /> </ItemGroup>
构建并运行您的项目以检查文件是否已创建。
推荐阅读
- reactjs - 在平板电脑上应对本机持久存储问题
- javascript - 我无法连接到本地主机上的服务器
- python - 运行 Flask 应用程序时导入有效,但直接运行文件时无效
- html-table - Bootstrap 5 - 表响应 - 不工作(对我来说)
- python-3.x - 是否可以使用 zip 文件中的烧瓶静态文件路径?
- powershell - 如何在 powershell 脚本中使用 SSISDeploy 命令
- angular - Angular + Jasmine + Karma 测试'window.location.href'
- c# - 如何在 SQLXML 中调整服务器协议和哈希
- java - 与 OkHttp 拦截器作斗争
- angular - Angular 10 中的根级服务如何与组件级服务交互