将 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();

加上一个过滤即可!

相关推荐
movee36 分钟前
一台低配云主机也能轻松愉快地玩RDMA
linux·人工智能·后端
程序员清风2 小时前
什么时候会考虑用联合索引?如果只有一个条件查就没有建联合索引的必要了么?
java·后端·面试
Seven972 小时前
【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?
java·后端·设计模式
子洋2 小时前
AnythingLLM + SearXNG 实现私有搜索引擎代理
前端·人工智能·后端
heart000_13 小时前
基于SpringBoot的智能问诊系统设计与隐私保护策略
java·spring boot·后端
汐泽学园3 小时前
基于ASP.NET校园二手交易网站设计与实现
后端·asp.net
MZWeiei4 小时前
Scala:case class(通俗易懂版)
开发语言·后端·scala
小杨4044 小时前
springboot框架项目实践应用三(监控运维组件admin)
spring boot·后端·监控
sevevty-seven6 小时前
Spring Boot 自动装配原理详解
java·spring boot·后端