1、安装依赖包
Serilog:
NuGet\Install-Package Serilog -Version 4.0.0-dev-02122
Serilog.Sinks.Console:
NuGet\Install-Package Serilog.Sinks.Console -Version 5.0.1
Serilog.Sinks.File:
NuGet\Install-Package Serilog.Sinks.File -Version 5.0.1-dev-00972
Serilog.Sinks.MSSqlServer:
NuGet\Install-Package Serilog.Sinks.MSSqlServer -Version 6.6.1-dev-00074
Serilog.AspNetCore:
NuGet\Install-Package Serilog.AspNetCore -Version 8.0.2-dev-00334
2、添加静态类SerilogConfig
注意更改数据库连接字符串
public static class SerilogConfig
{
public static void CreateLogger()
{
var filePath = Path.Combine(AppContext.BaseDirectory, "Logs/Serilog/log.txt");
var logDB = @"Server=;database=demo1;uid=;pwd=;TrustServerCertificate=true";
var sinkOpts = new MSSqlServerSinkOptions();
sinkOpts.TableName = "Logs_Serilog";
sinkOpts.AutoCreateSqlTable = true;
sinkOpts.BatchPostingLimit = 1;
sinkOpts.BatchPeriod = TimeSpan.FromSeconds(1);
var columnOpts = new ColumnOptions();
//columnOpts.Store.Remove(StandardColumn.Properties);
//columnOpts.Store.Add(StandardColumn.LogEvent);
//columnOpts.LogEvent.DataLength = 2048;
//columnOpts.PrimaryKey = columnOpts.TimeStamp;
//columnOpts.TimeStamp.NonClusteredIndex = true;
columnOpts.Store.Remove(StandardColumn.MessageTemplate);
columnOpts.Properties.ExcludeAdditionalProperties = true;
columnOpts.AdditionalColumns = new Collection<SqlColumn>
{
new SqlColumn{DataType = System.Data.SqlDbType.NVarChar, DataLength = 32, ColumnName = "IP"}
};
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console(
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({ThreadId}) {Message}{NewLine}{Exception}")
.WriteTo.File(filePath,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] ({ThreadId}) {Message:lj}{NewLine}{Exception}",
rollingInterval: RollingInterval.Day,
fileSizeLimitBytes: 1073741824) //1GB
.Enrich.FromLogContext()
.Enrich.WithProperty("IP",GetIpAddress())
.WriteTo.MSSqlServer(
connectionString: logDB,
sinkOptions: sinkOpts,
columnOptions: columnOpts
).CreateLogger();
}
public static void RefreshLogger()
{
if (Log.Logger != null)
{
Log.CloseAndFlush();
}
CreateLogger();
}
private static string GetIpAddress()
{
string ipAddress = "127.0.0.1";
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
foreach (IPAddress ip in ips)
{
if (ip.AddressFamily.ToString().ToLower().Equals("internetwork"))
{
ipAddress = ip.ToString();
return ipAddress;
}
}
return ipAddress;
}
}
3、Program.cs中配置
SerilogConfig.CreateLogger();
Log.Information("Starting web application");
builder.Host.UseSerilog();
4、使用
Controller中添加Serilog.Log类的静态方法记录日志,非Serilog.Log记录的日志也会记录到Console,File和DataBase:
private readonly ILogger<A01BaseController> _logger;
public A01BaseController(ILogger<A01BaseController> logger)
{
_logger = logger;
_logger.LogInformation($"LogInformation: {this.GetType().FullName}开始日志...ILogger");
_logger.LogInformation($"LogInformation: {this.GetType().FullName}被构造...ILogger");
_logger.LogError($"LogError: {this.GetType().FullName}被构造...ILogger");
_logger.LogDebug($"LogDebug: {this.GetType().FullName}被构造...ILogger");
_logger.LogWarning($"LogWarning: {this.GetType().FullName}被构造...ILogger");
_logger.LogInformation($"LogInformation: {this.GetType().FullName}结束日志...ILogger");
Log.Information($"LogInformation: {this.GetType().FullName}开始日志...Serilog");
Log.Information($"LogInformation: {this.GetType().FullName}被构造...Serilog");
Log.Error($"LogError: {this.GetType().FullName}被构造...Serilog");
Log.Debug($"LogDebug: {this.GetType().FullName}被构造...Serilog");
Log.Warning($"LogWarning: {this.GetType().FullName}被构造...Serilog");
Log.Information($"LogInformation: {this.GetType().FullName}结束日志...Serilog");
}
tips:
通过ILoggerFactory创建logger实例:
private readonly ILoggerFactory _loggerFactory;
private readonly ILogger<A01BaseController> _logger;
public A01BaseController(ILoggerFactory loggerFactory)
{
this._loggerFactory = loggerFactory;
_logger = _loggerFactory.CreateLogger<A01BaseController>();
_logger.LogInformation($"LogInformation: {this.GetType().FullName}开始日志...ILogger");
_logger.LogInformation($"LogInformation: {this.GetType().FullName}被构造...ILogger");
_logger.LogError($"LogError: {this.GetType().FullName}被构造...ILogger");
_logger.LogDebug($"LogDebug: {this.GetType().FullName}被构造...ILogger");
_logger.LogWarning($"LogWarning: {this.GetType().FullName}被构造...ILogger");
_logger.LogInformation($"LogInformation: {this.GetType().FullName}结束日志...ILogger");
}