Serilog
Serilog
serilog日志
serilog日志簡單方法
1安裝包

第一個是基礎(chǔ)的配置,第二個包是集成Serilog日志記錄器的擴展包,簡化在.NET應(yīng)用程序中集成和配置Serilog的過程。第三個是保存在文檔中
2 配置文件
public static void AddSerilog(this WebApplicationBuilder builder)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning) // 排除Microsoft的日志
.Enrich.FromLogContext() // 注冊日志上下文
.WriteTo.Logger(configure => configure // 輸出到文件
.MinimumLevel.Debug()
.WriteTo.File(
$"logs\\log.txt", // 單個日志文件,總?cè)罩荆腥罩敬娴竭@里面
rollingInterval: RollingInterval.Day,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u20}] {Message:lj}{NewLine}"
)
)
.CreateLogger();
builder.Host.UseSerilog();
}
Program:
//全局異常計入日志

serilog存入數(shù)據(jù)庫并到txt文檔分表,并顯示
- 配置文檔,注入,用哪個裝那個

/// <summary>
/// Serilog日志
/// </summary>
/// <param name="builder"></param>
public static void AddSerilog(this WebApplicationBuilder builder)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", true)
.Build(); // 讀取配置文件
var connectionString = configuration["ConnectionStrings:Con"].Trim(); // 獲取默認的數(shù)據(jù)庫連接字符串
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration) // 讀取配置文件中的配置
.WriteTo.Console(theme: AnsiConsoleTheme.Code) // 寫入控制臺輸出,且使用 AnsiConsoleTheme.Code 主題
.WriteTo.Map( // 動態(tài)配置
keyPropertyName: "Name", // 鍵屬性名
defaultKey: "0", // 默認鍵值
configure: (name, wt) => wt.Logger(lc => lc // 配置單個log
.WriteTo.MSSqlServer( // 寫入MSSQL
connectionString: connectionString, // 使用默認的數(shù)據(jù)庫連接字符串
sinkOptions: new MSSqlServerSinkOptions
{
TableName = $"LogEvents_{name}", // 動態(tài)表名
AutoCreateSqlTable = true // 自動創(chuàng)建表
})
.WriteTo.File($"logs\\log_{name}.txt", rollingInterval: RollingInterval.Day)) // 寫入日志文件
)
.CreateLogger(); // 創(chuàng)建log
}

"Serilog": {
"MinimumLevel": "Information" //日志輸出最小級別
},最小輸出級別

讀取文檔方法
/// <summary>
/// 日志文本讀取
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Get(string? logdate, string? name, int page = 1, int size = 15)
{
string logFilePath = $"logs\\log_1{DateTime.Now:yyyyMMdd}.txt";
List<LogEntry> logEntries = new List<LogEntry>();
try
{
string[] logLines = System.IO.File.ReadAllLines(logFilePath);
foreach (string logLine in logLines)
{
string[] logParts = logLine.Split(' ');
string timestamp = logParts[0].Replace("-", "")+ logParts[1].Replace(":","").Replace(".","");
string level = logParts[3];
string message = logParts[5];
string username= logParts[4];
DateTime timedate = DateTime.Parse(logParts[0]+ " "+logParts[1]);
LogEntry entry = new LogEntry
{
Timestamp = timestamp,
Level = level,
Message = message,
username= username,
TimeDate=timedate,
};
logEntries.Add(entry);
}
}
catch (IOException e)
{
// 在實際應(yīng)用中,你可能需要進一步處理文件讀取失敗的情況
return StatusCode(500, $"讀取日志文檔失敗:{e.Message}");
}
if (!string.IsNullOrEmpty(logdate))
{
DateTime targetDate = DateTime.Parse(logdate);
DateTime startOfDay = targetDate.Date;
DateTime endOfDay = targetDate.Date.AddDays(1).AddSeconds(-1);
logEntries = logEntries.Where(t => t.TimeDate >= startOfDay && t.TimeDate <= endOfDay).ToList();
}
if (!string.IsNullOrEmpty(name))
{
logEntries = logEntries.Where(t => t.username.Contains(name)).ToList();
}
int totalCount = logEntries.Count();
int pageCount = (int)Math.Ceiling(totalCount * 1.0 / size);
logEntries = logEntries.Skip((page - 1) * size).Take(size).ToList();
return Ok(new
{
logEntries,
totalCount,
pageCount,
});
}



浙公網(wǎng)安備 33010602011771號