日志
362 words
2 min
- ABP 框架没有实现任何日志基础设施. 它使用 ASP.NET Core 日志系统.
- 默认Serilog
日志等级
注意
"Debug --> Information --> Warning --> Error --> Fatal"
如何集成
cs
public class Program
{
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults()
// 使用Serilog
.UseSerilog((context, loggerConfiguration) =>
{
SerilogToEsExtensions.SetSerilogConfiguration(
loggerConfiguration,
context.Configuration);
}).UseAutofac();
}cs
public static void SetSerilogConfiguration(LoggerConfiguration loggerConfiguration, IConfiguration configuration)
{
// 默认读取 configuration 中 "Serilog" 节点下的配置
loggerConfiguration
.ReadFrom.Configuration(configuration)
.Enrich.FromLogContext();
// 如果要再日志加上自定义字段
loggerConfiguration.Enrich.WithProperty("Application", applicationName);
}配置
json
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": {
// 默认全局日志级别
"Default": "Information",
"Override": {
//名称空间为 Microsoft 日志级别
"Microsoft": "Information",
//名称空间为 Volo.Abp 日志级别
"Volo.Abp": "Information",
//名称空间为 Hangfire 日志级别
"Hangfire": "Information",
//名称空间为 DotNetCore.CAP 日志级别
"DotNetCore.CAP": "Information",
//名称空间为 Serilog.AspNetCore 日志级别
"Serilog.AspNetCore": "Information",
//名称空间为 Microsoft.EntityFrameworkCore 日志级别
"Microsoft.EntityFrameworkCore": "Warning",
//名称空间为 Microsoft.AspNetCore 日志级别
"Microsoft.AspNetCore": "Information"
}
},
"WriteTo": [
{
// 输出到控制台日志
"Name": "Console"
},
{
// 输出到文件
"Name": "File",
"Args": {
"path": "logs/logs-.txt",
// 按天输出
"rollingInterval": "Day"
}
},
{
// 输出到es
"Name": "Elastic",
"Args": {
"Enabled": false,
"Url": "http://es.cn",
"IndexFormat": "Lion.AbpPro.development.{0:yyyy.MM.dd}",
"UserName": "elastic",
"Password": "aVVhjQ95RP7nbwNy",
"ApplicationName": "Lion.AbpPro.HttpApi.Host"
}
}
]
}使用
cs
public class SampleAppService : AbpProAppService,ISampleAppService
{
private readonly ILogger<SampleAppService> _logger;
public SampleAppService(ILogger<SampleAppService> logger)
{
_logger = logger;
}
public async Task TestAsync()
{
_logger.LogDebug("LogDebug");
_logger.LogInformation("LogInformation");
_logger.LogWarning("LogWarning");
_logger.LogError("LogError");
_logger.LogTrace("LogTrace");
await Task.CompletedTask;
}
}日志追加字段
csharp
/// <summary>
/// 自定义追加日志内容
/// </summary>
/// <param name="logger"></param>
/// <param name="message">日志内容</param>
/// <param name="level">日志级别</param>
/// <param name="dictionary">追加内容</param>
public static void Custom(this ILogger logger, string message, LogLevel level = LogLevel.Information, Dictionary<string, object> dictionary = null)
{
if (dictionary == null || dictionary.Count == 0)
{
logger.Log(level, message);
}
else
{
using (logger.BeginScope(dictionary))
{
logger.Log(level, message);
}
}
}