Files
WCS/Cowain.TestProject/Services/LoggerConfigurationExtensions.cs
2026-03-02 09:08:20 +08:00

75 lines
2.7 KiB
C#

using Cowain.Base.Models;
using Microsoft.Extensions.Configuration;
using MySqlConnector;
using Serilog;
using Serilog.Events;
using Serilog.Sinks.MSSqlServer;
using System;
using System.Data;
namespace Cowain.TestProject.Services;
public static class LoggerConfigurationExtensions
{
public static LoggerConfiguration ConfigureDatabaseSink(
this LoggerConfiguration loggerConfig,
IConfiguration configuration)
{
var databaseType = configuration.GetSection("Database")["db"];
if (string.IsNullOrEmpty(databaseType) || !Enum.TryParse<DataBaseType>(databaseType.ToUpper(), out var dbType))
{
return loggerConfig;
}
return dbType switch
{
DataBaseType.MYSQL => ConfigureMySqlSink(loggerConfig, configuration),
DataBaseType.SQLSERVER => ConfigureSqlServerSink(loggerConfig, configuration),
DataBaseType.POSTGRES => ConfigurePostgreSqlSink(loggerConfig, configuration),
DataBaseType.SQLITE => ConfigureSqliteSink(loggerConfig, configuration),
_ => loggerConfig
};
}
private static LoggerConfiguration ConfigureMySqlSink(LoggerConfiguration loggerConfig, IConfiguration configuration)
{
var connectionString = configuration.GetConnectionString("MySqlConn");
return loggerConfig.WriteTo.MySQL(
connectionString: connectionString,
tableName: "Logs",
restrictedToMinimumLevel: LogEventLevel.Information
);
}
private static LoggerConfiguration ConfigureSqlServerSink(LoggerConfiguration loggerConfig, IConfiguration configuration)
{
var connectionString = configuration.GetConnectionString("SqlServerConn");
return loggerConfig.WriteTo.MSSqlServer(
connectionString: connectionString,
sinkOptions: new MSSqlServerSinkOptions
{
TableName = "Logs",
AutoCreateSqlTable = true
}
);
}
private static LoggerConfiguration ConfigurePostgreSqlSink(LoggerConfiguration loggerConfig, IConfiguration configuration)
{
var connectionString = configuration.GetConnectionString("PostGresConn");
return loggerConfig.WriteTo.PostgreSQL(connectionString: connectionString, tableName: "Logs",
restrictedToMinimumLevel: LogEventLevel.Information);
}
private static LoggerConfiguration ConfigureSqliteSink(LoggerConfiguration loggerConfig, IConfiguration configuration)
{
var connectionString = configuration.GetConnectionString("SqlLiteConn");
return loggerConfig.WriteTo.SQLite(
sqliteDbPath: connectionString?.Replace("Data Source=", "").Trim(),
tableName: "Logs"
);
}
}