将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)

ASP.NET Core 应用程序的日志保存到 D 盘的文件中,可以使用第三方日志库(如 Serilog)来实现。Serilog 是一个流行的日志库,支持将日志输出到文件、控制台、数据库等多种目标。

以下是实现步骤:

1. 安装 Serilog 相关包

在你的 ASP.NET Core 项目中,安装以下 NuGet 包:

Serilog.AspNetCore:用于集成 Serilog 到 ASP.NET Core。

Serilog.Sinks.File:用于将日志写入文件。

在项目目录下运行以下命令:

bash

bash 复制代码
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.File

2. 配置 Serilog

在 Program.cs 中配置 Serilog,指定日志输出到 D 盘的文件。

修改 Program.cs

csharp

bash 复制代码
using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console() // 保留控制台日志输出
    .WriteTo.File("D:/logs/app.log", rollingInterval: RollingInterval.Day) // 日志保存到 D 盘
    .CreateLogger();

// 将 Serilog 添加到应用程序中
builder.Host.UseSerilog();

// 其他服务配置
builder.Services.AddControllers();

var app = builder.Build();

// 使用 Serilog 记录启动日志
app.UseSerilogRequestLogging();

app.MapControllers();

app.Run();

说明:

.WriteTo.Console():保留控制台日志输出(如果你不需要控制台日志,可以去掉这一行)。

.WriteTo.File("D:/logs/app.log", rollingInterval: RollingInterval.Day):将日志写入 D 盘的 logs/app.log 文件,并按天滚动生成新文件。

3. 验证日志输出

运行你的应用程序,日志将会同时输出到控制台和 D 盘的 logs/app.log 文件中。

日志文件位置:

日志文件会保存在 D:/logs/app.log。

如果按天滚动,每天会生成一个新的日志文件,例如:

app20231001.log

app20231002.log

4. 高级配置(可选)

如果你需要更高级的日志配置,例如限制日志文件大小、压缩日志文件等,可以参考以下配置:

csharp

bash 复制代码
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File(
        "D:/logs/app.log",
        rollingInterval: RollingInterval.Day,
        fileSizeLimitBytes: 10 * 1024 * 1024, // 限制文件大小为 10MB
        rollOnFileSizeLimit: true,
        retainedFileCountLimit: 30 // 保留最近 30 个日志文件
    )
    .CreateLogger();

5. 测试日志记录

在你的 FingerController 中,使用 ILogger 记录日志:

C#

bash 复制代码
[HttpPost("OpenDev")]
public bool OpenDev()
{
    _logger.LogInformation("Opening device...");
    return _fingerService.IOpenDev();
}

运行应用程序后,检查 D 盘的 logs/app.log 文件,确认日志是否正确写入。

总结

通过使用 Serilog,你可以轻松地将 ASP.NET Core 的日志保存到 D 盘的文件中。Serilog 提供了丰富的配置选项,可以满足各种日志记录需求。


1. 引入 ILogger

首先,你需要通过依赖注入(Dependency Injection, DI)将 ILogger 注入到 FingerService 中。

修改 FingerService 构造函数

csharp

复制

bash 复制代码
using Microsoft.Extensions.Logging;

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

    public FingerService(ILogger<FingerService> logger)
    {
        _logger = logger;
        // 初始化指纹捕获缓冲区
        FPBuffer = new byte[mfpWidth * mfpHeight];
    }

    // 其他代码...
}

2. 在方法中使用日志记录

在你的方法中,使用 _logger 记录关键操作和错误信息。

示例:IOpenDev 方法

csharp

复制

bash 复制代码
public bool IOpenDev()
{
    _logger.LogInformation("Opening fingerprint device...");

    int ret = zkfp.ZKFP_ERR_OK;
    if (IntPtr.Zero == (mDevHandle = zkfp2.OpenDevice(0)))
    {
        _logger.LogError("Failed to open fingerprint device.");
        return false;
    }

    if (IntPtr.Zero == (mDBHandle = zkfp2.DBInit()))
    {
        _logger.LogError("Failed to initialize database.");
        zkfp2.CloseDevice(mDevHandle);
        mDevHandle = IntPtr.Zero;
        return false;
    }

    _logger.LogInformation("Fingerprint device and database initialized successfully.");
    return true;
}

ASP.NET Core 中,默认的日志级别是 Information,这意味着所有 Information 级别及以上的日志都会被记录。

日志内容包括:

应用程序启动信息。

HTTP 请求的详细信息(如请求路径、请求方法、响应状态码、响应时间等)。

控制器方法的执行过程。

如何只记录我手动写的日志呢

 // 配置 Serilog
 Log.Logger = new LoggerConfiguration()
     .WriteTo.Console() // 保留控制台日志输出
     .WriteTo.File(
     "D:/Log/fingerprint/finger.log",         //将日志写入 D 盘的 logs/app.log 文件
     rollingInterval: RollingInterval.Day,   //并按天滚动生成新文件。
     fileSizeLimitBytes: 10 * 1024 * 1024,  // 文件大小限制为 10MB
     rollOnFileSizeLimit: false, // 当文件大小达到限制时,创建新文件    //false:当文件大小达到限制时,继续向当前文件写入日志(默认行为)。
     retainedFileCountLimit: 30 // 保留最近 30 个日志文件
     ).Filter.ByExcluding(logEvent =>logEvent.Properties.TryGetValue("SourceContext", out var sourceContext) && sourceContext.ToString().Contains("Microsoft")) // 过滤掉 Microsoft 的日志
     .CreateLogger();

加上一个过滤即可!

相关推荐
沈韶珺1 小时前
Visual Basic语言的云计算
开发语言·后端·golang
沈韶珺1 小时前
Perl语言的函数实现
开发语言·后端·golang
美味小鱼2 小时前
Rust 所有权特性详解
开发语言·后端·rust
我的K84092 小时前
Spring Boot基本项目结构
java·spring boot·后端
慕璃嫣3 小时前
Haskell语言的多线程编程
开发语言·后端·golang
晴空๓3 小时前
Spring Boot项目如何使用MyBatis实现分页查询
spring boot·后端·mybatis
Hello.Reader7 小时前
深入浅出 Rust 的强大 match 表达式
开发语言·后端·rust
customer0810 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
计算机-秋大田13 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计