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

加上一个过滤即可!

相关推荐
程序员爱钓鱼15 分钟前
匿名函数与闭包(Anonymous Functions and Closures)-《Go语言实战指南》原创
后端·golang
言之。2 小时前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
diving deep2 小时前
XML简要介绍
xml·java·后端
专注VB编程开发20年3 小时前
asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
服务器·前端·asp.net
编程乐学(Arfan开发工程师)4 小时前
06、基础入门-SpringBoot-依赖管理特性
android·spring boot·后端
编程乐学(Arfan开发工程师)4 小时前
05、基础入门-SpringBoot-HelloWorld
java·spring boot·后端
橘子海全栈攻城狮4 小时前
【源码+文档+调试讲解】党员之家服务系统小程序1
java·开发语言·spring boot·后端·小程序·旅游
冼紫菜5 小时前
Java开发中使用 RabbitMQ 入门到进阶详解(含注解方式、JSON配置)
java·spring boot·后端·rabbitmq·springcloud
boring_1115 小时前
Apache Pulsar 消息、流、存储的融合
分布式·后端
源码方舟7 小时前
SpringBoot + Shiro + JWT 实现认证与授权完整方案实现
java·spring boot·后端