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

(三)Apache log4net™ 手册 -演示

0、引言

在开始本文之前,推荐您首先阅读 Apache log4net™ 手册中有关 介绍 与 配置 的相关内容。本文将通过实践分别为您演示如何使用 Visual Studio 2022 在 .NET Framework 项目和 .NET 项目下配置并使用 Log4Net。

1、为 .NET Framework 项目配置 Log4Net

1.1、先决条件

  • 一个简单的 .NET Framework 项目(比如:控制台应用(.NET Framework))

1.2、引用 Log4Net NuGet 包

  1. 在 1.1 小节中,笔者创建了一个新的 .NET Framework 控制台项目。解决方案名称为 “Log4NetDemo”, 项目名称为 “ConsoleApp4DotNetFramework”:
    项目资源

    项目目标框架为 .NET Framework 4.8.1

  2. 前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
    管理 NuGet 包

  3. 在打开的标签页中切换到【浏览】页面,搜索 “Log4Net” 并选中;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
    安装 log4net NuGet 包

  4. 安装完成后,可以看到解决方案资源管理器内新增了一个 package.config 文件:
    新增 packages.config
    内容如下:
    packages.config 文件内容

1.3、配置 Log4Net

  1. 完成 1.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为 log4net.config,点击【添加】:
    添加配置文件

  2. 在解决方案资源管理器内右击 log4net.config,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”:
    修改属性

  3. 双击打开 log4net.config 文件,将其修改为以下内容并保存:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net><!-- 定义一个控制台 appender --><appender name="Console" type="log4net.Appender.ConsoleAppender"><!-- 日志输出格式 --><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /></layout></appender><!-- 定义一个文件 appender --><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!-- 保存文件的名称 --><file value="example.log" /><appendToFile value="true" /><!-- 文件的编码方式 --><param name="Encoding" value="UTF-8"/><!-- 每个文件的大小 --><maximumFileSize value="100KB" /><!-- 保存文件数量 --><maxSizeRollBackups value="2" /><!-- 日志输出格式 --><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level %thread %logger - %message%newline" /></layout></appender><!-- 定义 root logger 的配置 --><root><!-- 定义 root logger 的日志级别 --><level value="ALL" /><!-- 引用 Console appender --><appender-ref ref="Console" /><!-- 引用 RollingFile appender --><appender-ref ref="RollingFile" /></root>
    </log4net>
    
  4. 在解决方案资源管理器内展开项目下的 Properties 属性文件夹,可以看到下属有一个 AssemblyInfo.cs 的文件,双击打开该文件:
    打开 AssemblyInfo.cs

  5. 在该文件的末尾附加如下内容并保存:

    // 指定log4net 的配置文件
    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
    

1.4、测试 Log4Net

  1. 在解决方案资源管理器内双击打开 Program.cs,将其修改为以下内容并保存:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;namespace ConsoleApp4DotNetFramework
    {internal class Program{// 定义一个静态 logger 变量,其引用名为 "Program" 的 Logger 实例private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));static void Main(string[] args){log.Debug("开始调试");log.Info("Entering application.");log.Warn("警告");log.Error("错误", new Exception("异常信息"));log.Fatal("致命错误", new Exception("异常信息"));Console.ReadKey();}}
    }
    
  2. 运行项目,将得到以下输出:
    输出

  3. 在应用程序的基目录将会生成一个名为 example.log 的日志文件,内容如下:
    日志文件

2、为 .NET 项目配置 Log4Net

2.1、先决条件

  • 一个简单的 .NET 项目(比如:使用 Visual Studio 创建 .NET 控制台应用程序)。

2.2、引用 Log4Net NuGet 包

  1. 在 2.1 小节中,笔者在解决方案 “Log4NetDemo” 中继续新建了一个 .NET 控制台项目, 项目名称为 “ConsoleApp4DotNet”。设置该项目为启动项目:
    项目资源

    目标框架为 .NET 6.0

  2. 前往 Visual Studio 菜单栏的【工具】-【NuGet 包管理器】-【管理解决方案的 NuGet 程序包】:
    管理 NuGet 包

  3. 在打开的标签页中切换到【已安装】页面,选中 “Log4Net”;在右方的配置页面勾选要安装的项目,点击【安装】按钮:
    安装 log4net NuGet 包

  4. 安装完成后,在解决方案资源管理器内双击项目名称打开项目(.csproj)文件,可以看到项目文件中添加了对 Log4Net NuGet 包的引用:
    PackageReference

    package.config or PackageReference?

2.3、配置 Log4Net

  1. 完成 2.2 小节的内容后,在解决方案资源管理器内右击项目名称,点击【添加】-【新建项】。在打开的对话框中搜索找到“应用程序配置文件” C# 项,修改文件名为 log4net.config,点击【添加】:
    添加配置文件

  2. 在解决方案资源管理器内右击 log4net.config,点击【属性】,将“复制到输出目录”属性的值修改为“如果较新则复制”:
    修改属性

  3. 双击打开 log4net.config 文件,将其修改为以下内容并保存:

    <?xml version="1.0" encoding="utf-8" ?>
    <log4net><!-- 定义一个控制台 appender --><appender name="Console" type="log4net.Appender.ConsoleAppender"><!-- 日志输出格式 --><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%5level [%thread] (%file:%line) - %message%newline" /></layout></appender><!-- 定义一个文件 appender --><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!-- 保存文件的名称 --><file value="example.log" /><appendToFile value="true" /><!-- 文件的编码方式 --><param name="Encoding" value="UTF-8"/><!-- 每个文件的大小 --><maximumFileSize value="100KB" /><!-- 保存文件数量 --><maxSizeRollBackups value="2" /><!-- 日志输出格式 --><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level %thread %logger - %message%newline" /></layout></appender><!-- 定义 root logger 的配置 --><root><!-- 定义 root logger 的日志级别 --><level value="ALL" /><!-- 引用 Console appender --><appender-ref ref="Console" /><!-- 引用 RollingFile appender --><appender-ref ref="RollingFile" /></root>
    </log4net>
    
  4. 由于 .NET Core 项目中,AssemblyInfo.cs 文件是自动生成的。所以我们无法在解决方案树内找到该文件。我们可以选择关闭自动生成(参考这里),手动创建 AssemblyInfo.cs(参考这里以及这里),最后使用 assembly-level attribute 来配置 log4net。不过还是算了,让我们直接使用编程方式指定 log4net 的配置文件吧(见下一节)。

2.4、测试 Log4Net

  1. 在解决方案资源管理器内双击打开 Program.cs,将其修改为以下内容并保存:

    public class Program
    {// 定义一个静态 logger 变量,其引用名为 "Program" 的 Logger 实例private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));static void Main(string[] args){// 使用 XmlConfigurator 直接读取 XML 文件并使用它来配置 log4netlog4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));log.Debug("开始调试");log.Info("Entering application.");log.Warn("警告");log.Error("错误", new Exception("异常信息"));log.Fatal("致命错误", new Exception("异常信息"));}
    }
    
  2. 运行项目,将得到以下输出:
    输出

  3. 在应用程序的基目录将会生成一个名为 example.log 的日志文件,内容如下:
    日志文件

http://www.lryc.cn/news/191500.html

相关文章:

  • VScode远程root权限调试
  • 【ARM CoreLink 系列 7 -- TZC-400控制器简介】
  • 【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)
  • 浅析倾斜摄影三维模型(3D)几何坐标精度偏差的几个因素
  • 【广州华锐互动】智轨列车AR互动教学系统
  • 驾驶数字未来:汽车业界数字孪生技术的崭新前景
  • JVM 性能调优参数
  • 11在SpringMVC中响应到浏览器的数据格式,@ResponseBody注解和@RestController复合注解的功能详解
  • go 流程控制之switch 语句介绍
  • sql 时间有偏差的解决方法
  • Apache Lucene 7.0 - 索引文件格式
  • GEE:使用中文做变量和函数名写GEE代码
  • 针对量化交易SDK的XTP的初步摸索
  • Unity编辑器从PC平台切换到Android平台下 Addressable 加载模型出现粉红色,类似于材质丢失的问题
  • CSS 边框
  • Docker逃逸---CVE-2020-15257浅析
  • Python学习 day03(注意事项)
  • vue中的生命周期有什么,怎么用
  • 论文阅读:ECAPA-TDNN
  • 【Unity】【VR】详解Oculus Integration输入
  • vue axios封装
  • oracle、mysql、postgresql数据库的几种表关联方法
  • 什么是UML UML入门到放弃系列
  • vue3 + element Plus实现表格根据关键字合并行,并实现行的增删改操作
  • c++视觉处理---直方图均衡化
  • 【LeetCode】2.两数相加
  • 蜘蛛飞机大战
  • 代码混淆界面介绍
  • 蓝桥杯每日一题2023.10.9
  • HTML5的新增表单元素