Debug Logging正在工作,但是我无法使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
答案 0 :(得分:1)
对于AddTraceSource
,.NET Core
不支持它,如果要使用.NET Framework
,则需要将项目定位到AddTraceSource
。
要使用此提供程序,应用程序必须在.NET Framework(而不是.NET Core)上运行。提供程序使您可以将消息路由到各种侦听器,例如示例应用程序中使用的TextWriterTraceListener。
要检查此行为,您可以尝试按照以下步骤操作:
编辑csproj
<TargetFramework>net47</TargetFramework>
由于Microsoft.AspNetCore.All
与net47不兼容,因此请直接引用所需的推荐人:
<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>
构建并运行项目以检查是否创建了文件。
答案 1 :(得分:0)
好吧,也许就是这个原因...
要使用此提供程序,应用程序必须在.NET Framework(而不是.NET Core)上运行。