1、依赖包和配置文件同前面文章;
2、新建静态类LoggerManagerExt:
注意更改数据库连接字符串
public static class LoggerManagerExt
{
public static void Log4Register(this WebApplicationBuilder builder)
{
builder.Logging.AddLog4Net("CfgFile/Log4Net.config");
builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);//设置最低级别
}
public static void NLogRegister(this WebApplicationBuilder builder)
{
NLog.LogManager.Setup().LoadConfigurationFromFile("CfgFile/NLog.config").GetCurrentClassLogger();
builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Information);
builder.Host.UseNLog();
}
public static void SeriLogRegister(this WebApplicationBuilder builder)
{
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();
builder.Host.UseSerilog();
}
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中使用:
builder.Log4Register();
builder.NLogRegister();
builder.SeriLogRegister();
Log.Information("Starting web application");
4、使用同前面文章
总结
Serilog最好用,首选;
Log4Net次之;
NLog不用;