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

embedded/2024/12/28 3:19:50/

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

以下是实现步骤:

1. 安装 Serilog 相关包

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

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

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

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

bash

dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.File

2. 配置 Serilog

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

修改 Program.cs
csharp

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

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

5. 测试日志记录

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

C#

[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
复制

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
复制

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 请求的详细信息(如请求路径、请求方法、响应状态码、响应时间等)。

控制器方法的执行过程。

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

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

加上一个过滤即可!


http://www.ppmy.cn/embedded/149342.html

相关文章

构建一个rust生产应用读书笔记7-Mock编码浪子

编写单元测试是确保代码质量、稳定性和可维护性的关键步骤&#xff0c;尤其是在采用测试驱动开发&#xff08;TDD&#xff09;方法时。对于 EmailClient 组件的测试&#xff0c;我们确实应该从小处着手&#xff0c;先保证组件本身的功能正确无误&#xff0c;然后再逐步集成到更…

【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

MySQL从入门到入土---MySQL表的约束 (内含实践)---详细版

目录 引入&#xff1a; null 与not null default&#xff1a; comment列描述 &#xff1a; not null 和 default&#xff1a; zerofill &#xff1a; 主键&#xff1a;primary key 复合主键&#xff1a; 自增长:auto_increment 唯一键&#xff1a;unique key 外键&a…

near-synonym反义词生成(2):Prompt +Bert-MLM(FT)

near-synonym之反义词生成方法二 near-synonym, 中文反义词/近义词/同义词(antonym/synonym)工具包. 方法一为(neg_antonym): Word2vec -> ANN -> NLI -> Length 方法二为(mlm_antonym): Prompt Bert-MLM(FT) Beam-Search 项目地址 github: https://github.com/yon…

计算机基础复习12.22

Redis实现分布式锁 set lock_key unique_value nx px 10000 lock_key: key键 unique_value:是唯一的标识 nx: 表示lock_key不存在&#xff0c;才对lock_key进行设置 px: 设置过期时间 Linux的排查命令 top 实时监控进程 显示CPU 内存 负载 交换区 netstat:查看网络连接…

windows11家庭版安装docker无法识别基于wsl2的Ubuntu

软件环境&#xff1a;windows11家庭版安装WSL2,Ubuntu22.04&#xff0c;docker4.34.2 问题描述&#xff1a;安装docker时&#xff0c;设置阶段无法识别Ubuntu22.04. 原因&#xff1a;windows11家庭版本默认没有Hyper-V 解决方案&#xff1a;将下述代码保存在新建记事本中&am…

带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)

适配器模式&#xff08;Adapter Pattern&#xff09; 适配器模式适配器模式&#xff08;Adapter Pattern&#xff09;概述talk is cheap&#xff0c; show you my code总结 适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是面向对象软件设计中的一种结构型设计…

服务器时间不同步

问题 每次设置完时间之后&#xff0c;过一段时间服务器的时间就会变慢。 date相关命令 date # 查询当前时间(日期及时间&#xff0c;格式为&#xff1a;周几 月 日 时:分:秒 时区 年) Tue Dec 24 11:53:14 CST 2024date "%Y-%m-%d %H:%M:%S" # 使用和格式字符串…