C# 将日期添加到ASP.NETCore2.1默认记录器
我使用的是ASP.NET的默认记录器,它可以创建这样的日志C# 将日期添加到ASP.NETCore2.1默认记录器,c#,asp.net-core,logging,C#,Asp.net Core,Logging,我使用的是ASP.NET的默认记录器,它可以创建这样的日志 info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] User profile is available. Using 'C:\Users\Test\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt key
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using 'C:\Users\Test\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
warn: Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
但我想把DateTime附加到它上面
[2019.12.19 10:00] info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
User profile is available. Using 'C:\Users\Test\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
[2019.12.19 10:00] warn: Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
我尝试使用Serilog,但无法获取默认日志,只能获取我直接创建的
日志错误(“错误”)代码>已显示。在ASP.Net Core中,您可以将记录器配置为包含时间戳
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateWebHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logger=>
{
logger.AddConsole(x => x.TimestampFormat = "[HH:mm:ss] ");
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().UseIIS();
});
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateWebHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(记录器=>
{
logger.AddConsole(x=>x.TimestampFormat=“[HH:mm:ss]”);
})
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup().UseIIS();
});
}
在ASP.Net Core中,您可以将记录器配置为包含时间戳
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateWebHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logger=>
{
logger.AddConsole(x => x.TimestampFormat = "[HH:mm:ss] ");
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>().UseIIS();
});
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateWebHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(记录器=>
{
logger.AddConsole(x=>x.TimestampFormat=“[HH:mm:ss]”);
})
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup().UseIIS();
});
}
在github上,内置的.NET Core控制台记录器不记录日期时间
您可以尝试自动记录时间戳
1.使用AddConsoleAdvanced方法自定义LoggerBuilderExtensions
public static class LoggerBuilderExtensions
{
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
/// <param name="loggingSection"></param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder,
IConfiguration loggingSection)
{
if (loggingSection == null)
throw new ArgumentNullException(nameof(loggingSection));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider,
AdvancedConsoleLoggerProvider>());
//We can't read the result of logging.AddConfiguration mtd here, cause it registers internal classes (without public interfaces).
//So, a configuration section must be passed to configure the logger.
builder.Services.TryAdd(
ServiceDescriptor.Singleton<IConsoleLoggerSettings>(
provider => new ConfigurationConsoleLoggerSettings(loggingSection)));
return builder;
}
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder)
{
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider, AdvancedConsoleLoggerProvider>());
builder.Services.TryAdd(
ServiceDescriptor.Singleton<IConsoleLoggerSettings>(provider =>ConsoleLoggerSettings.Optimized));
return builder;
}
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
/// <param name="settings">The formatting settings, timezone, etc.</param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder,
IConsoleLoggerSettings settings)
{
if (settings == null)
throw new ArgumentNullException(nameof(settings));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider, AdvancedConsoleLoggerProvider>());
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton(provider => settings));
return builder;
}
}
公共静态类LoggerBuilderExtensions
{
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
///
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder,
I配置记录(第节)
{
如果(loggingSection==null)
抛出新ArgumentNullException(nameof(loggingSection));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton());
//我们无法在此处读取logging.AddConfiguration mtd的结果,因为它注册内部类(没有公共接口)。
//因此,必须传递一个配置部分来配置记录器。
builder.Services.TryAdd(
ServiceDescriptor.Singleton(
provider=>new ConfigurationConsoleLogger设置(loggingSection));
返回生成器;
}
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder)
{
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton());
builder.Services.TryAdd(
Singleton(provider=>ConsoleLoggerSettings.Optimized));
返回生成器;
}
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
///格式设置、时区等。
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder,
IConsoleLogger(设置)
{
如果(设置==null)
抛出新ArgumentNullException(nameof(settings));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton());
builder.Services.TryAddEnumerable(
Singleton(provider=>settings));
返回生成器;
}
}
2.自定义记录器
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(loggingBuilder =>
{
loggingBuilder.AddConsoleAdvanced(new ConsoleLoggerSettings()
{
IncludeLineBreak = false,
IncludeTimestamp = true,
IncludeZeroEventId = false,
IncludeLogNamespace = false
});
})
.UseStartup<Startup>();
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.ConfigureLogging(loggingBuilder=>
{
loggingBuilder.AddConsoleAdvanced(新的ConsoleLogger设置()
{
IncludeLineBreak=假,
IncludeTimestamp=true,
IncludeZeroEventId=false,
includegnamespace=false
});
})
.UseStartup();
在github上,内置的.NET Core控制台记录器不记录日期时间
您可以尝试自动记录时间戳
1.使用AddConsoleAdvanced方法自定义LoggerBuilderExtensions
public static class LoggerBuilderExtensions
{
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
/// <param name="loggingSection"></param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder,
IConfiguration loggingSection)
{
if (loggingSection == null)
throw new ArgumentNullException(nameof(loggingSection));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider,
AdvancedConsoleLoggerProvider>());
//We can't read the result of logging.AddConfiguration mtd here, cause it registers internal classes (without public interfaces).
//So, a configuration section must be passed to configure the logger.
builder.Services.TryAdd(
ServiceDescriptor.Singleton<IConsoleLoggerSettings>(
provider => new ConfigurationConsoleLoggerSettings(loggingSection)));
return builder;
}
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder)
{
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider, AdvancedConsoleLoggerProvider>());
builder.Services.TryAdd(
ServiceDescriptor.Singleton<IConsoleLoggerSettings>(provider =>ConsoleLoggerSettings.Optimized));
return builder;
}
/// <summary>Adds a console logger named 'ConsoleAdvanced' to the factory.</summary>
/// <param name="builder">The <see cref="T:Microsoft.Extensions.Logging.ILoggingBuilder" /> to use.</param>
/// <param name="settings">The formatting settings, timezone, etc.</param>
public static ILoggingBuilder AddConsoleAdvanced(this ILoggingBuilder builder,
IConsoleLoggerSettings settings)
{
if (settings == null)
throw new ArgumentNullException(nameof(settings));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton<ILoggerProvider, AdvancedConsoleLoggerProvider>());
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton(provider => settings));
return builder;
}
}
公共静态类LoggerBuilderExtensions
{
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
///
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder,
I配置记录(第节)
{
如果(loggingSection==null)
抛出新ArgumentNullException(nameof(loggingSection));
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton());
//我们无法在此处读取logging.AddConfiguration mtd的结果,因为它注册内部类(没有公共接口)。
//因此,必须传递一个配置部分来配置记录器。
builder.Services.TryAdd(
ServiceDescriptor.Singleton(
provider=>new ConfigurationConsoleLogger设置(loggingSection));
返回生成器;
}
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder)
{
builder.Services.TryAddEnumerable(
ServiceDescriptor.Singleton());
builder.Services.TryAdd(
Singleton(provider=>ConsoleLoggerSettings.Optimized));
返回生成器;
}
///将名为“ConsoleAdvanced”的控制台记录器添加到工厂。
///要使用的。
///格式设置、时区等。
公共静态ILoggingBuilder AddConsoleAdvanced(此ILoggingBuilder构建