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

加上一个过滤即可!

相关推荐
canonical_entropy21 分钟前
最小信息表达:从误解到深层理解的五个关键点
后端·架构
郝开38 分钟前
Spring Boot 2.7.18(最终 2.x 系列版本):版本概览;兼容性与支持;升级建议;脚手架工程搭建
java·spring boot·后端
天若有情6731 小时前
新闻通稿 | 软件产业迈入“智能重构”新纪元:自主进化、人机共生与责任挑战并存
服务器·前端·后端·重构·开发·资讯·新闻
清水2 小时前
Spring Boot企业级开发入门
java·spring boot·后端
星释2 小时前
Rust 练习册 :Proverb与字符串处理
开发语言·后端·rust
ZZHHWW3 小时前
RocketMQ vs Kafka01 - 存储架构深度对比
后端
依_旧4 小时前
MySQL下载安装配置(超级超级入门级)
java·后端
熊小猿4 小时前
RabbitMQ死信交换机与延迟队列:原理、实现与最佳实践
开发语言·后端·ruby
淘源码d4 小时前
什么是医院随访系统?成熟在用的智慧随访系统源码
java·spring boot·后端·开源·源码·随访系统·随访系统框架
武子康4 小时前
大数据-147 Java 访问 Apache Kudu:从建表到 CRUD(含 KuduSession 刷新模式与多 Master 配置)
大数据·后端·nosql