当前位置: 首页 > news >正文

C# Windows Service 中添加 log4net 的详细教程

步骤 1:安装 log4net 包

在 Windows Service 项目中,首先需要安装 log4net 日志库。以下是两种常用安装方法:

方法一:通过 NuGet 包管理器安装

在 Visual Studio 中打开包管理器控制台,执行以下命令:

Install-Package log4net
方法二:使用 .NET CLI 安装

在项目根目录打开终端,执行以下命令:

dotnet add package log4net

步骤 2:添加 log4net.config 配置文件

  1. 创建 XML 文件
    在您的项目中(例如使用 Visual Studio),右键点击项目名称 → 选择“添加” → “新建项” → 选择“XML 文件”。
    将文件命名为 log4net.config,并点击“添加”。
  2. 编辑文件内容
    在项目中添加一个名为 log4net.config 的 XML 配置文件,并设置其属性 “复制到输出目录” 为 “始终复制”。
<?xml version="1.0" encoding="utf-8" ?>
<log4net><!-- 控制台输出 --><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><!-- 文件输出 - 按日期滚动日志文件 --><appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"><!-- 日志文件路径和基础名称 --><file value="Logs\ServiceLog_" /><!-- 是否追加到文件 --><appendToFile value="true" /><!-- 滚动方式:按日期滚动 --><rollingStyle value="Date" /><!-- 日期格式:yyyyMMdd 表示年月日 --><datePattern value="yyyyMMdd'.log'" /><!-- 每个日期是否生成新文件(即使前一天文件为空) --><staticLogFileName value="false" /><!-- 最多保留的日志文件数(设为-1表示不限制) --><maxSizeRollBackups value="-1" /><!-- 日志格式 --><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /></layout></appender><!-- 日志级别 --><root><level value="INFO" /><appender-ref ref="ConsoleAppender" /><appender-ref ref="RollingFileAppender" /></root>
</log4net>

步骤 3:配置 AssemblyInfo.cs

在 Properties\AssemblyInfo.cs 文件末尾添加以下行,告诉 log4net 配置文件的位置:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

步骤 4:在 Windows Service 中使用 log4net

修改你的 Service 类,添加 log4net 日志记录功能:

using System;
using System.ServiceProcess;
using log4net;namespace MyWindowsService
{public partial class MyService : ServiceBase{// 声明日志记录器private static readonly ILog _log = LogManager.GetLogger(typeof(MyService));private System.Timers.Timer _timer;public MyService(){InitializeComponent();// 确保日志配置正确加载log4net.Config.XmlConfigurator.Configure();}protected override void OnStart(string[] args){try{_log.Info("服务启动中...");// 初始化定时器,每30秒执行一次_timer = new System.Timers.Timer(30000);_timer.Elapsed += Timer_Elapsed;_timer.Start();_log.Info("服务已成功启动");}catch (Exception ex){_log.Error("服务启动失败", ex);throw;}}private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){try{_log.Debug("定时器执行中...");// 这里添加你的业务逻辑_log.Info("定时器任务执行完成");}catch (Exception ex){_log.Error("定时器任务执行失败", ex);}}protected override void OnStop(){try{_log.Info("服务停止中...");if (_timer != null){_timer.Stop();_timer.Dispose();}_log.Info("服务已成功停止");}catch (Exception ex){_log.Error("服务停止失败", ex);throw;}}// 用于调试的方法public void TestStart(){OnStart(null);}// 用于调试的方法public void TestStop(){OnStop();}}
}

** 代码需要注意的是:log4net.Config.XmlConfigurator.Configure();一定要写,否则服务重启写日志就会出异常 **

步骤 5:调试配置(Program.cs)

修改 Program.cs 以便于调试:

using System;
using System.ServiceProcess;namespace MyWindowsService
{static class Program{static void Main(){
#if DEBUG// 调试模式下直接运行服务逻辑,无需安装为Windows服务MyService service = new MyService();service.TestStart();Console.WriteLine("服务正在运行,按任意键停止...");Console.ReadKey();service.TestStop();
#else// 发布模式下作为Windows服务运行ServiceBase[] ServicesToRun;ServicesToRun = new ServiceBase[]{new MyService()};ServiceBase.Run(ServicesToRun);
#endif}}
}

步骤 6:安装和运行服务

1.构建项目,生成可执行文件
2.使用 InstallUtil 安装服务:

InstallUtil.exe MyWindowsService.exe

3.在服务管理器中启动你的服务
4.查看日志文件(默认在程序目录的 Logs 文件夹下)

日志级别说明

log4net 提供了多种日志级别,按严重程度从低到高为:
*DEBUG:调试信息,通常用于开发环境
*INFO:普通信息,记录程序正常运行状态
*WARN:警告信息,表示可能存在问题但不影响程序运行
*ERROR:错误信息,记录程序运行中的错误
*FATAL:致命错误,记录导致程序崩溃的严重错误

http://www.dtcms.com/a/389902.html

相关文章:

  • 用 pymupdf4llm 打造 PDF → Markdown 的高效 LLM 数据管道(附实战对比)
  • 机械设备钢材建材网站 网站模版
  • Mysql8 SQLSTATE[42000] sql_mode=only_full_group_by错误解决办法
  • 【第五章:计算机视觉-项目实战之图像分类实战】2.图像分类实战-(3)批量归一化(Batch Normalization)和权重初始化的重要性
  • SQL Server 多用户读写随机超时?从问题分析到根治方案
  • 2.css的继承性,层叠性,优先级
  • OpenStack 学习笔记(四):编排管理与存储管理实践(上)
  • list_for_each_entry 详解
  • Perplexity AI Agent原生浏览器Comet
  • 颈椎按摩器方案开发,智能按摩仪方案设计
  • Sui 学习日志 1
  • 六、Java—IO流
  • 数据库 事务隔离级别 深入理解数据库事务隔离级别:脏读、不可重复读、幻读与串行化
  • 从“纸面”到“人本”:劳务合同管理的数字化蜕变
  • ARM架构——学习时钟7.2
  • VS Code 调试配置详解:占位符与语言差异
  • 锁 相关知识总结
  • caffeine 发生缓存内容被修改以及解决方案-深度克隆
  • rust编写web服务06-JWT身份认证
  • 《怪猎:荒野》制作人:PC平台对日本游戏非常重要
  • 大模型训练框架(二)FSDP
  • MySQL——系统数据库、常用工具
  • 蓝桥杯题目讲解_Python(转载)
  • 性能测试监控实践(九):性能测试时,监控docker微服务资源利用率和分析
  • TCP,UDP和ICMP
  • Python语法学习篇(七)【py3】
  • 网页控制鼠标 查看鼠标位置
  • PIT 定时器
  • 【题解】 [蓝桥杯 2019 省 B] 特别数的和
  • 数字隔离器,串口通信的安全之“芯”