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

加上一个过滤即可!

相关推荐
追逐时光者6 小时前
一款使用 C# 编写专为 Windows 11 打造的文件资源管理器增强工具!
后端·.net
风象南6 小时前
普通人用AI加持赚到的第一个100块
人工智能·后端
冰_河8 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
JavaGuide10 小时前
7 道 RAG 基础概念知识点/面试题总结
前端·后端
桦说编程11 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
格砸12 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化
前端·人工智能·后端
蝎子莱莱爱打怪12 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
哈密瓜的眉毛美12 小时前
零基础学Java|第三篇:DOS 命令、转义字符、注释与代码规范
后端
用户605723748730813 小时前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员