Log4Net 使用方法

article/2025/9/29 17:15:01

第一步:安装nuget log4net包

在这里插入图片描述

第二步:新建log4net.config配置文件,配置日志输出格式

<?xml version="1.0"?>
<configuration><configSections><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/></configSections><appSettings><add key="WebSocketPort" value="45154" /></appSettings><log4net><!--指定日记记录方式,以滚动文件的方式(文件记录)--><appender name="logInfoToFile" type="log4net.Appender.RollingFileAppender,log4net"><!--日志路径--><file value="logs/log4net/info"/><!--是否是向文件中追加日志--><AppendToFile value="true"/><!--日志根据日期滚动--><RollingStyle value="Date"/><!--日志文件名格式为:info.2021-12-30.txt--><DatePattern value="'.'yyyy-MM-dd'.txt'"/><!--日志文件名是否是固定不变的--><StaticLogFileName value="false"/><!--布局--><layout type="log4net.Layout.PatternLayout,log4net"><ConversionPattern value="%d %-5p [%c] %m%n"/></layout></appender><appender name="logErrorToFile" type="log4net.Appender.RollingFileAppender,log4net"><file value="logs/log4net/error"/><AppendToFile value="true"/><RollingStyle value="Date"/><!--日志文件名格式为:error.2021-12-30.txt--><DatePattern value="'.'yyyy-MM-dd'.txt'"/><StaticLogFileName value="false"/><layout type="log4net.Layout.PatternLayout,log4net"><ConversionPattern value="%d %-5p [%c] %m%n"/></layout></appender><!--()logger --><root><!-- 支持级别:ALL --><level value="ALL" additivity="false"/><!-- ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF--><!-- 支持的appender名称:logInfoToFile --><appender-ref ref="logInfoToFile"/></root><!-- logger名称为ApplicationInfoLog,阻止父logger中的appender --><logger name="ApplicationInfoLog" additivity="false"><!-- 支持级别:ALL --><level value="ALL"/><!-- 支持的appender名称:logInfoToFile --><appender-ref ref="logInfoToFile"/></logger><logger name="ApplicationErrorLog" additivity="false"><!-- 支持级别:ALL --><level value="ALL"/><!-- 支持的appender名称:logErrorToFile --><appender-ref ref="logErrorToFile"/></logger></log4net>
</configuration>

或者 在项目的.csproj文件添加如下代码:

<ItemGroup><Content Update="log4net.config"><CopyToOutputDirectory>Always</CopyToOutputDirectory></Content>
</ItemGroup>

第三步 控制器 代码内容

   [ApiController][Route("[controller]/[action]")]public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger  <HomeController> logger) {_logger = logger;}[HttpGet]/// <summary>/// 获取日志输出 /// </summary>/// <returns></returns>public void GetLogOnUniversalHost() {ILoggerRepository repository = LogManager.CreateRepository(".NET Core RepositoryRepository");XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));ILog log = LogManager.GetLogger(repository.Name, ".NET Core Log4net");log.Info(".NET Core Log4net log1");log.Info("test log1");log.Error("error1");log.Info("linezero1");}

第四步:在启动项中添加Log配置替换默认的日志提供程序,在控制器中编写具体输出内容

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureLogging(logging => // 添加提供程序(通用主机){logging.ClearProviders(); // 去掉默认添加的日志提供程序logging.AddConsole();logging.AddDebug();logging.AddEventSourceLogger();logging.AddEventLog();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup < Startup > ();});

运行之后

在这里插入图片描述

第五步关于logger节点配置详解

1:Log4Net结构

Log4net主要分为5个核心组件: Logger, Appender, Filter, Layout, Object Render。

2:Logger介绍

Logger是负责日志的记录者,假设我们需要记录一些正常的运行时日志和出现异常时的错误日志,那么我们可以通过在配置文件当中添加两个Logger实现。Logger主要用于记录日志的分类和控制日志的级别。它可以以多种格式输出日志信息,同时它也可以控制日志的输出级别。

log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。

3:Appender介绍

Appender提供记录的介质,我们可能要将日志输出到控制台,文本文件,windows 日志事件查看器中,包括数据库,邮件等等位置。
我们可以通过Appender配置实现,而且Log4Net当中已经默认提供了一些常用的Appender,我们可以简单地修改一些配置文件就实现同时向数据库和同时向文件中写入的功能。

4:Filter介绍

Filter就是过滤器,使用过滤器可以过滤掉Appender输出的部分内容,只输出感兴趣的日志。

5:Layout介绍

Layout用于控制Appender的输出格式,可以使线性的也可以使XML。一个Appender只能有一个Layout配置。

6:Object Render介绍

Object Render将告诉logger如何把一个对象转化为一个字符串记录到日志里。ILog中定义的记录日志的方法接收的参数是Object,而不是String。
例如你想把Orange对象记录到日志中,但此时logger只会调用Orange默认的ToString方法而已。所以要定义一个OrangeRender类实现log4net.ObjectRender.IObjectRender接口,然后注册它。这时logger就会知道如何把Orange记录到日志中了。

7:logger节点配置

name 必须的, logger的名称, 在代码中得到ILog对象时用到。
additivity可选, 取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。
logger支持的子元素: level、appender-ref、param。
level 最多一个。 在这个级别或之上的才会被记录。OFF、FATAL、ERROR、WARN 、INFO、DEBUG、ALL
appender-ref 0个或多个,要引用的appender的名字。
param 0个或多个,设置一些参数。

8:日志级别等级

 高到底分别为:OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL

9:ILog对象说明

ILog是实现Logger的一个接口,ILog定义了5个方法(Debug,Inof,Warn,Error,Fatal)分别对不同的日志等级记录日志。这5个方法都有1个重载,以Debug为例说明一下,其它的和它差不多。

ILog中对Debug方法的定义如下:
void Debug(object message);

    void Debug(object message, Exception exception);

还有一个布尔属性:
bool IsDebugEnabled { get; }

如果使用Debug(object message, Exception exception)则无论Layout如何配置,日志都会输出Exception信息,包括Exception的Message和Trace。如果使用Debug(object message),则无论Layout如何配置是不会输出Exception信息的。

在代码中可以使用LogManager类来得到Logger配置下的相应的ILog对象,LogManager类用来管理所应得Logger,它的GetLogger静态方法,可以获得配置文件中相应的Logger,代码如下:

ILog log = LogManager.GetLogger(“logger-name”)

10:appender节点配置详解

1:appender节点配置

支持的属性:name、type(name属性必须唯一,type属性必须指定)。
name 必须的,appender对象的名称
type 必须的,appender对象的输出类型
常用的子元素:appender-ref、filter、layout、param

appender-ref 0个或多个,允许此appender引用其他appender,并不是所以appender类型都支持。
filter 0个或多个,定义此appender使用的过滤器。
ayout 最多一个。定义appender使用的输出格式。
param 0个或多个, 设置Appender类中对应的属性的值。

2:appender的输出方式(type属性)

AdoNetAppender              将日志记录到数据库中。可以采用SQL和存储过程两种方式。AnsiColorTerminalAppender   将日志高亮输出到ANSI终端。AspNetTraceAppender         能用asp.net中Trace的方式查看记录的日志。BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。ConsoleAppender             将日志输出到应用程序控制台。EventLogAppender            将日志写到Windows Event Log。FileAppender                将日志输出到文件。ForwardingAppender          发送日志事件到子Appenders。LocalSyslogAppender         将日志写到local syslog service (仅用于UNIX环境下)。MemoryAppender              将日志存到内存缓冲区。NetSendAppender             将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。OutputDebugStringAppender   将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。RemoteSyslogAppender        通过UDP网络协议将日志写到Remote syslog service。RemotingAppender            通过.NET Remoting将日志写到远程接收端。RollingFileAppender         将日志以回滚文件的形式写到文件中。SmtpAppender                将日志写到邮件中。SmtpPickupDirAppender       将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。TelnetAppender              客户端通过Telnet来接受日志事件。TraceAppender               将日志写到.NET trace 系统。UdpAppender                 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

11:filter节点配置

filter只能作为的子元素,type属性表示Filter的类型。常用子元素数量0个或多个,作用设置一些参数。

1:filter的类型说明DenyAllFilter 阻止所有的日志事件被记录

LevelMatchFilter    只有指定等级的日志事件才被记录LevelRangeFilter    日志等级在指定范围内的事件才被记录LoggerMatchFilter   Logger名称匹配,才记录PropertyFilter      消息匹配指定的属性值时才被记录StringMathFilter    消息匹配指定的字符串才被记录MdcFilterNdcFilter

12:Layout节点配置详解

1:layout节点配置

layout节点只能作为的子元素。type属性表示Layout的类型。常用子元素数量0个或多个,作用设置一些参数。

Layout用于控制Appender的输出格式,可以使线性的也可以使XML。最常用的Layout应该是用户自定义格式的PatternLayout,其次是SimpleLayout和ExceptionLayout。然后还有4个Layout,其中有两个是输出Xml的Layout,但是中文会有问题。ExceptionLayout需要给Logger的方法传入Exception对象作为参数才起作用,否则就什么也不输出。输出的时候会包含Message和Trace。

2:layout节点的type属性取值

ExceptionLayout 只呈现日志事件中异常的文本信息

PatternLayout           可以通过类型字符串来配置的布局RawPropertyLayout       从日志事件中提取属性值RawTimeStampLayout      从日志事件中提取日期RawUtcTimeStampLayout   从日志事件中提取UTC日期SimpleLayout            很简单的布局XmlLayout               把日志事件格式化为XML元素的布局

3:PatterLayout的格式化字符串

%m、%message 输出的日志消息

%d、%datetime        输出当前语句运行的时刻,格式%date{yyyy-MM-dd HH:mm:ss,fff}%r、%timestamp       输出程序从运行到执行到当前语句时消耗的毫秒数%p、%level           日志的当前优先级别%c、%logger          当前日志对象的名称%L、%line            输出语句所在的行号%F、%file            输出语句所在的文件名,警告:只在调试的时候有效,调用本地信息会影响性能%a、%appdomain       引发日志事件的应用程序域的名称。%C、%class、%type    引发日志请求的类的全名,警告:会影响性能%exception           异常信息%u、%identity        当前活动用户的名字,我测试的时候%identity返回都是空的。警告:会影响性能%l、%location        引发日志事件的名空间、类名、方法、行号。警告:会影响性能,依赖pdb文件%M、%method          发生日志请求的方法名,警告:会影响性能%n、%newline         换行符%x、%ndc             NDC(nested diagnostic context)%X、%mdc、%P、%properties  等介于 %property%property           输出{log4net:Identity=, log4net:UserName=, log4net:HostName=} %t、%thread         引发日志事件的线程,如果没有线程名就使用线程号。%w、%username       当前用户的WindowsIdentity,类似:HostName/Username。警告:会影响性能%utcdate            发生日志事件的UTC时间。例如:%utcdate{HH:mm:ss,fff}%%                  输出一个百分号

4:PatterLayout格式修饰符

格式修饰符 对齐 最小宽 最大宽 说明

%20logger       右对齐     20        无     如果logger名不足20个字符,就在左边补空格%-20logger      左对齐     20        无     如果logger名不足20个字符,就在右边补空格%.30logger      左对齐     无        30     超过30个字符将截断%20.30logger    右对齐     20        30     logger名要在20到30之间,少了在左边补空格,多了截断%-20.30logger   左对齐     20        30     logger名要在20到30之间,少了在右边补空格,多了截断

13 : 其它节点的说明与配置

1:param节点

元素可以是如何元素的子元素,包含的属性:name、value、type。name:必须的,取值是父对象的参数名。value:可选的,value是一个能被转化为参数值的字符串。type:可选的,value和type中,必须有一个属性被指定。type是一个类型名,如果type不是在log4net程序集中定义的,就需要使用全名。

2:root节点

root节点的作用是所有其它logger都默认继承它。root元素没有属性。root节点的子元素与logger一样有appender-ref、level、param。

3:log4net节点

Log4net节点是整个日志配置的根节点,包含的属性:debug、update、threshold。debug:可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。update:可选,取值是Merge(合并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交配置的时候会重置已经配置过的库。threshold:可选,取值是repository(库)中注册的level,默认值是ALL。

Log4net节点支持的子元素:appender(0或多个)、logger (0或多个)、renderer (0或多个)、root(最多一个)、param(0或多个)。

4:关联配置文件

log4net默认关联的是应用程序的配置文件App.config或Web.config,可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:log4net.Config.XmlConifguratorAttribute。

XmlConfiguratorAttribute有3个属性:ConfigFile、ConfigFileExtension、Watch。ConfigFile:配置文件的名字,文件路径相对于应用程序目录。ConfigFileExtension:配置文件的扩展名,文件路径相对于应用程序的目录,不能和ConfigFile属性一起使用。Watch:如果将Watch属性设置为true,就会监视配置文件,当配置文件发生变化的时候,就会重新加载。例如:

//监视默认的配置文件,App.exe.config

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

    //配置文件:App.exe.log4net[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net")]//配置文件:log4net.config[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意这里一定是绝对路径,如下所示:log4net.Config.XmlConfigurator.Configure(new FileInfo(@"F:/log4net.config"));

完结


http://chatgpt.dhexx.cn/article/ujFbKmYm.shtml

相关文章

完整Log4Net配置信息,详细注释

<?xml version"1.0" encoding"utf-8" ?> <configuration><configSections><section name"log4net" type"log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/></configSections>&l…

Log4Net 详解

1.Log4Net环境的搭建与基本配置 (1)Log4Net框架介绍 Log4net 是 Apache 下一个开放源码的项目&#xff0c;它是Log4j 的一个克隆版。我们可以控制日志信息的输出目的地。Log4net中定义了多种日志信息输出模式。它可以根据需要将日志输出到控制台&#xff0c;文本文件&#xff…

第一节:框架前期准备篇之Log4Net日志详解

一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架&#xff0c;它的功能很强大&#xff0c;可以将日志分为不同的等级&#xff0c;以不同的格式输出到不同的存储介质中&#xff0c;比如&#xff1a;数据库、txt文件、内存缓冲区、邮件、控制台、ANS…

Log4net详细教程

Log4net详细教程 一、Log4net概述log4net主要几个方法&#xff1a; 二、配置教程1、配置文件详解2、程序配置文件3、日志帮助类的编写 一、Log4net概述 log4net 是从 java 下有卓越表现的 log4j 移植过来的&#xff0c;是一个能够将日志信息输出到各种 不同目标的.net 类库&am…

Log4Net详解

Log4Net详解 零、文章目录 一、Log4Net详解 1、功能概述 &#xff08;1&#xff09;概述 Log4net库是.Net下一个非常优秀的开源日志记录组件&#xff0c;是一个帮助程序员将日志信息输出到各种目标&#xff08;控制台、文件、数据库等&#xff09;的工具。如果应用程序出现…

C#【必备技能篇】log4net的使用

使用log4net大致分以下几步&#xff1a; 1.安装 log4net&#xff0c;通过 Nuget 下载&#xff08;或者有log4net.dll的话&#xff0c;直接引用即可&#xff09; 2.新建 log4net.config 配置文件 <?xml version"1.0" encoding"utf-8" ?> <con…

Oracle存储过程的简单举例

一、建立测试数据 --建立测试数据: create table person(编号 number(10),姓名 varchar2(20),密码 varchar2(20));insert into person values(1,xzw,888);select * from person; 查询结果如下&#xff1a; 二、建立存储过程 --建立存储过程: create or replace procedure qu…

Mysql 存储过程案例教程

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 一、无参数无返回值存储过程 DELIMITER表示自定义结束符号&#xff0c;SQL一般默认&#xff1b;为结束符号 红色部分为固定格式 下面的查询语句&#xff0c;可以改成任意复杂的SQL语句 DELIMITE…

Oracle存储过程入门教程(通俗理解存储过程)

Oracle存储过程入门通俗介绍 一、118个真实应用场景的Oracle存储过程案例及开发指南二、存储过程通俗理解三、创建存储过程基本语法(汇总)四、执行存储过程的方式&#xff08;5种&#xff09;五、网上现有的创建存储过程的两种方式解释&#xff08;看注释&#xff09;六、一些存…

MySQL存储过程示例

实例1&#xff1a; 为了演示MySQL中的存储过程&#xff0c;我们先创建一些表和数据&#xff1a; drop table if exists my_test_table; create table my_test_table (id integer primary key not null AUTO_INCREMENT,name varchar(20),age integer,point double ); insert int…

mysql 存储过程详解

前言 在项目开发中&#xff0c;经常会遇到这样一种场景&#xff0c;当修改A表的一条数据时&#xff0c;需要关联修改B表、C表甚至其他更多表的数据&#xff0c;为什么会这样呢&#xff1f; 在真实的业务场景中&#xff0c;往往一张表的数据关联的业务是多样的&#xff0c;举例…

mysql存储过程call_mysql call 存储过程

PHP调用MYSQL存储过程实例 PHP调用MYSQL存储过程实例 标签&#xff1a; mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一&#xff1a;无参的存储过程$conn mysql_connect(localhost,root,root) o... 文章 thinkyoung 2016-01-20 544浏览量 存…

ORACLE存储过程

oracle存储过程 目录 oracle存储过程 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 4.案例实战 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 4.案例实战 附.参考资料 一.什…

Greenplum创建存储过程

1.美图 1.对比 greenplum 的plpgsql 注意: greenplum 的plpgsql 与 postgresql 不是完全兼容的。plpgsql 不明确界定 函数和存储过程&#xff0c;“returns void” 表示 存储过程&#xff0c;“return 数据类型” 表示 函数。greenplum中的函数分成3种类型: immutable(不可变…

Mysql 创建存储过程和函数及各种例子

Mysql 创建存储过程和函数及各种例子 1. Mysql 创建存储过程1.1 前言知识1.1.1 语法结构1.1.2 简单解释 1.2 创建存储过程入门例子1.2.1 无参存储过程1.2.1.1 不带变量1.2.1.2 带变量 1.2.2 有入参的存储过程1.2.3 有出参的存储过程1.2.4 有入参和存储的存储过程1.2.5 inout的存…

oracle 存储过程 实例 循环 给查询赋值 游标取值

CREATE OR REPLACE PROCEDURE p_updete_gs is --仅供参考 i_jdid varchar(32); i_ryid varchar(32); cursor cur is --游标 给查询赋值 select c.jdid jdid, t.ryid rybh from t_zcj_rctj t,t_zj_jd c where t.ryidc.rybh and t.bgzt<>3 and c.bgzt<>…

SQL存储过程实例详解

SQL存储过程实例详解 本文用3个题目&#xff0c;从建立数据库到创建存储过程&#xff0c;详细讲解数据库的功能。 题目1 学校图书馆借书信息管理系统建立三个表&#xff1a; 学生信息表&#xff1a;student 字段名称 数据类型 说明 stuID char(10) 学生编号&#xff0c;主…

oracle存储过程实例

认识存储过程和函数 存储过程和函数也是一种PL/SQL块&#xff0c;是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序&#xff0c;我们通常把PL/SQL程序称为无名块&#xff0c;而存储过程和函数是以命名的方式存储于数据库中的。和PL/SQL程序相比&#xff…

MySQL存储过程实例

1、简单实例 create procedure demo.p_test1() begin-- 使用 declare语句声明一个变量declare id int default 0;declare name varchar(50) default ;-- 使用set语句给变量赋值set id7521;-- 将users表中id1的名称赋值给usernameselect ename into name from demo.emp where e…

存储过程详解与实例

存储过程 1、存储过程的优缺点 优点 通过把处理封装在容易使用的单元中&#xff0c;简化复杂的操作&#xff1b;简化对变动的管理&#xff1b;通常存储过程有助于提高应用程序的性能&#xff1b;存储过程有助于减少应用程序和数据库服务器之间的流量&#xff0c;因为应用程序…