75 lines
2.7 KiB
C#
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"
|
|
);
|
|
}
|
|
|
|
|
|
} |