自学内容网 自学内容网

在asp.net webapi项目中 将数据库连接字符串写在配置文件中,及Program配置Serilog存放路径以及设置

在asp.net webapi项目中
将数据库连接字符串(如 Data Source=D:\SqliteFile\fingerprint.db;Version=3;)写在配置文件中是一个良好的实践,因为它可以让你在不修改代码的情况下轻松更改数据库配置。以下是如何将数据库连接字符串配置到 appsettings.json 文件中的步骤:

1. 修改 appsettings.json

在 appsettings.json 文件中添加一个新的配置节,用于存储数据库连接字符串。

示例 appsettings.json:
json
复制

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "FingerprintDb": "Data Source=D:\\SqliteFile\\fingerprint.db;Version=3;"
  }
}

关键点:
在 ConnectionStrings 节点下添加一个名为 FingerprintDb 的配置项,值为数据库连接字符串。

你可以根据需要修改路径(如 D:\SqliteFile\fingerprint.db)。

2. 读取配置文件中的连接字符串

在代码中,使用 IConfiguration 接口读取配置文件中的连接字符串。

修改 FingerService 构造函数:
csharp
复制

using Microsoft.Extensions.Configuration;

public class FingerService : IFingerService
{
    private readonly ILogger<FingerService> _logger;
    private readonly string _connectionString;

    public FingerService(ILogger<FingerService> logger, IConfiguration configuration)
    {
        _logger = logger;
        _connectionString = configuration.GetConnectionString("FingerprintDb"); // 从配置文件中读取连接字符串
    }

    // 其他代码...
}

关键点:
通过 IConfiguration 接口读取 appsettings.json 中的 ConnectionStrings:FingerprintDb。

将读取到的连接字符串存储在 _connectionString 字段中。

3. 使用配置的连接字符串

在需要使用数据库连接字符串的地方,替换硬编码的字符串为从配置文件中读取的值。

示例:SaveFingerprintTemplateToDatabase 方法
csharp
复制

private async Task<bool> SaveFingerprintTemplateToDatabase(int userId, byte[] template)
{
    try
    {
        using (SQLiteConnection conn = new SQLiteConnection(_connectionString)) // 使用配置的连接字符串
        {
            // 其他代码...
        }
     }
}

关键点:
使用 _connectionString 替换硬编码的连接字符串。

总结

通过将数据库连接字符串配置到 appsettings.json 文件中,并使用 IConfiguration 接口读取配置,你可以:

避免硬编码连接字符串,提高代码的可维护性。

轻松更改数据库配置,而无需修改代码。

支持不同的环境(如开发、测试、生产)使用不同的数据库配置。

这样,你的代码将更加灵活和健壮。


Program配置Serilog存放路径以及设置

你可以将 Serilog 的日志文件路径和配置参数(如日志文件路径、滚动策略等)配置到 appsettings.json 文件中,然后在代码中读取这些配置。以下是实现步骤:

1. 修改 appsettings.json

在 appsettings.json 文件中添加一个新的配置节,用于存储 Serilog 的配置。

示例 appsettings.json:
json
复制

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "D:/Log/fingerprint/finger.log", // 日志文件路径
          "rollingInterval": "Day", // 按天滚动
          "fileSizeLimitBytes": 10485760, // 文件大小限制为 10MB
          "rollOnFileSizeLimit": false, // 文件大小达到限制时,继续写入当前文件
          "retainedFileCountLimit": 30 // 保留最近 30 个日志文件
        }
      }
    ],
    "Filter": {
      "ByExcluding": {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Contains(SourceContext, 'Microsoft')"
        }
      }
    }
  }
}

关键点:
Serilog 节点用于配置 Serilog 的参数。

WriteTo 配置日志输出目标(如文件)。

Filter 配置日志过滤规则(如过滤掉 Microsoft 的日志)。

2. 配置 Serilog 读取配置文件

在 Program.cs 中配置 Serilog,使其从 appsettings.json 文件中读取配置。

示例 Program.cs:
csharp
复制

using Serilog;
using Serilog.Settings.Configuration;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
builder.Host.UseSerilog((context, services, configuration) => configuration
    .ReadFrom.Configuration(context.Configuration) // 从 appsettings.json 读取配置
    .Enrich.FromLogContext()
      .Filter.ByExcluding(logEvent => logEvent.Properties.TryGetValue("SourceContext", out var sourceContext) && sourceContext.ToString().Contains("Microsoft")) // 过滤掉 Microsoft 的日志
    .WriteTo.Console() // 保留控制台日志输出
);

// 其他服务配置…

var app = builder.Build();

app.Run();
关键点:
使用 ReadFrom.Configuration(context.Configuration) 从 appsettings.json 读取 Serilog 配置。

WriteTo.Console() 保留控制台日志输出。

3. 结果

Serilog 会根据 appsettings.json 中的配置自动写入日志文件。

日志文件路径、滚动策略、文件大小限制等参数都可以通过配置文件灵活调整。

框架的日志(如 Microsoft 的日志)会被过滤掉,只保留你手动编写的日志。

4. 总结

通过将 Serilog 的配置参数(如日志文件路径、滚动策略等)配置到 appsettings.json 文件中,并使用 ReadFrom.Configuration 读取配置,你可以:

避免硬编码日志配置,提高代码的可维护性。

轻松更改日志配置,而无需修改代码。

支持不同的环境(如开发、测试、生产)使用不同的日志配置。

这样,你的代码将更加灵活和健壮。


原文地址:https://blog.csdn.net/weixin_44895040/article/details/144694011

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!