广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.net项目使用日志框架log4net
  • 650
分享到

.net项目使用日志框架log4net

2024-04-02 19:04:59 650人浏览 八月长安
摘要

目录一、log4net简介二、log4net结构1、Logger:2、APPender:3、Filter:4、Layout:5、Object Render三、Log4net参数:四、

一、log4net简介

Log4net是Apache下一个开放源码项目,我们可以控制日志信息的输出目的地。
Log4net中定义了多种日志信息输出模式。
在做项目的时候最头疼的是在程序发布到正式环境之后出现了问题,我们不能调试而且问题很难找到,于是我们需要大量的日志数据来精确的跟踪程序的运行状态。
Log4net可以帮我们来解决这一个难题,对于日志的输出我们不需要人为的去干涉,它可以根据需要将日志输出到控制台、文本文件、windows日志事件查看器、数据库、邮件等位置,以便我们快速跟踪程序bug。

二、log4net结构

log4net主要分为5个核心组件:Logger、APPender、Filter、Layout、Object Render。

1、Logger:

主要用于记录日志的分类和控制日志的级别。它可以以多种格式输出日志信息,同时它也可以控制日志的输出级别。

2、APPender:

   这里我们简单称之为“附着器”,意思就是说日志的输出必须依赖于它,更确切的说以文本形式输出,还是控制台格式输出都必须要依靠它来控制。log4net定义了多种附着器:
(1)AdoNetAppender:将日志记录到数据库中,可以采用sql和存储过程两种方式。
(2)FileAppender:将日志写到文件中。
(3)MemoryAppender:将日志存到内存缓冲区。
(4)ConsoleAppender:将日志输出到控制台。
(5)EventLogAppender:将日志写到Windows Event Log中。
(6)ANSIColorTerminalAppender:在ANSI窗口终端写下高亮度的日志事件。
(7)ASPNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
(8)BufferingForwardingAppender:在输出到Appenders之前先缓存日志事件。
(9)RollingFileAppender:将日志以回滚文件的形式写到文件中。
(10)SmtpAppender:将日志写到邮件中。

3、Filter:

  Appender是将日志以缺省值的方式输出,意思就是按照默认值的方式输出。而Filter意思是过滤器,使用Filter可以将日志以不同的格式来输出。

4、Layout:

  这个用于控制日志输出显示格式。

5、Object Render

  用于按照用户自定义标准来输出日志。

三、Log4net参数:

针对Layout设置日志输出的格式
1.%m(message):输出的日志消息
2.%n(new line):换行
3.%d(datetime):输出当前语句运行的时刻
4.%r(runtime):输出程序从运行到当前语句时消耗的毫秒数
5.%t(thread id):当前语句所在线程的ID
6.%p(priority):日志的当前优先级
7.%c(Class):当前日志对象的名称
8.%f(file):输出语句所在的文件名
9.%l(line):输出语句所在的行号
10.%数字:表示该项的最小宽度,如果不够,则用空格填充。

例如:"[时间]:%d%n[级别]:%p%n[内容]:%m%n%n"
[时间]:2016-10-28 10:21:38,634
[级别]:INFO
[内容]:>>>>>>>>>>>

四、Log4net日志分类

Log4net 分为如下几个级别:

  • FATAL 毁灭级别
  • ERROR 错误级别
  • WARA  警告级别
  • INFO  消息级别
  • DEBUG 调试级别

这几种日志级别高低:FATAL>ERROR>WARA>INFO>DEBUG
只有日志输出级别大于或等于配置的级别才能输出日志信息。
比如我的日志配置级别为INFO,那么只有log.info(),log.warm(),log.Error(),log.Fatal()才能输出日志信息,Debug方式就不能输出。
Log4net中还有两种特殊的配置级别:ALL -允许所有的日志级别输出,OFF - 拒绝所有的日志级别输出。

五、在配置中启用和关闭日志

在config文件中可以很方便地关闭和启用日志,就是在<root>进行配置,如下就是一个例子:

 <root>
       <!--设置日志输出级别-->
       <level value="INFO"></level>
       <!--以文件的形式记录日志-->
       <appender-ref ref="RollingLogFileAppender"></appender-ref>
       <!--以控制台的形式记录日志-->
       <appender-ref ref="ConsoleAppender"></appender-ref>
       <!--以数据库的形式记录日志-->
       <appender-ref ref="AdoNetAppender"></appender-ref>
 </root>

在上面的例子中可以看出,如果想增加日志输出目的地,增加<appender-ref>节点就是了,注意后面的ref是在config中配置的appender name,如果想要取消,删除或者注释掉这行就可以了。

六、log4net使用

1、引用log4net.dll文件

使用log4net必须引入log4net.dll文件,两种下载log4net.dll的方式:

(1)、在Nuget中下载log4net

点击"安装"进行安装

(2)、在官网下载

官网网址:Http://logging.apache.org/log4net/

下载DLL文件,解压之后根据.net FRAMEWORK的版本,选择对应的DLL文件,文件路径:C:\Users\Lenovo\Desktop\log4net-2.0.7-bin-newkey\log4net-2.0.7\bin\net\4.5\release。

引用->添加引用,将下载的log4net.dll文件添加进来。

2、在config文件中的配置

首先要添加config文件,在类库项目、命令行程序及winform中添加的是app.config,在WEBFORM中添加的是web.config。或者新添加一个"应用程序配置文件",将配置信息添加在新的配置文件中,在本示例中,将配置信息添加在新的应用程序配置文件中。新的配置文件命名为:log4net.config。

注意:要将log4net.config的属性“复制到输出目录”设置为“始终复制”。在log4net上右键选择文件属性,修改属性

要使用log4net,首先要在config文件的<configSections>节点中增加配置(如果没有这个节点请手动增加),如下:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>

除此之外,还要在顶级节点<configuration>下增加<log4net>子节点。在<log4net>节点下就可以增加<appender>子节点,每个<appender>子节点代表一种记录日志的方式。

在使用日志的类的命名空间前加上XmlConfiguratorAttribute标记

不加这个标记的话则log无法生效,如果类较多则比较麻烦,此时可以把这个配置放在AssemblyInfo.cs中,针对整个程序集生效。

3、示例程序

配置文件:

 <?xml version="1.0" encoding="utf-8" ?>
 <configuration>
 
   <configSections>
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
   </configSections>
   <log4net>
     <!--把日志信息输出到文件里-->
     <!-- 日志文件部分log输出格式的设定 -->
     <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
       <!--日志文件名开头-->
       <file value="Logs/Log_"/>
       <!--多线程时采用最小定-->
       <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
       <!--是否追加到文件,默认为true,通常无需设置-->
       <appendToFile value="true"/>
       <!--设置动态文件名-->
       <StaticLogFileName value="false"/>
       <!--变换的形式为日期,这种情况下每天只有一个日志-->
       <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
       <!--<rollingStyle value="Date"/>-->
       <!--变换的形式为日志大小-->
       <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
       <RollingStyle value="Composite"/>
       <!--日期的格式 (yyyyMMdd),每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
       <datePattern value="yyyy_MM_dd&quot;.log&quot;"/>
       <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
       <MaxSizeRollBackups value="100"/>
       <!--每个日志文件的最大大小;可用的单位:KB|MB|GB;不要使用小数,否则会一直写入当前日志-->
       <maximumFileSize value="8MB"/>
       <!--日志格式-->
       <layout type="log4net.Layout.PatternLayout">
         <header value="------------------------------------------------------------"/>
         <ConversionPattern value="★★★★★★%newline%date [%thread] %-5level %logger [%ndc] - %newline%message%newline" />
       </layout>
     </appender>
     <!--记录日志到数据库-->
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
       <!--缓存:当日志达到一定的数量,在往数据库里面保存,减少数据库压力-->
       <bufferSize value="1"/>
       <!--引用的动态链接库-->
       <connectionType value="System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral,PublicKeyToKen=b77a5c561934e089"/>
       <!--数据库连接字符串-->
       <connectionString value="Data Source=JIANGXIAOLIANG;Initial Catalog=NightCat;Integrated Security=True"/>
       <!--插入数据库表的SQL语句-->
       <commandText value="INSERT INTO [dbo].[Sys_Log]([Date],[Thread] ,[Leval],[Logger],[Message],[Exception]) VALUES (@Date ,@Thread,@Leval ,@Logger ,@Message,@Exception)"/>
       <!--参数-->
       <parameter>
         <parameterName value="@Date"/>
         <dbType value="DateTime"/>
         <layout type="log4net.Layout.RawTimeStampLayout"/>
       </parameter>
       <parameter>
         <parameterName value="@Thread"/>
         <dbType value="String"/>
         <size value="255"></size>
         <layout type="log4net.Layout.PatternLayout">
           <conversionPattern value="%thread"/>
         </layout>
       </parameter>
       <parameter>
         <parameterName value="@Leval"/>
         <dbType value="String"/>
         <size value="255"></size>
         <layout type="log4net.Layout.PatternLayout">
           <conversionPattern value="%leval"/>
         </layout>
       </parameter>
       <parameter>
         <parameterName value="@Logger"/>
         <dbType value="String"/>
         <size value="255"></size>
         <layout type="log4net.Layout.PatternLayout">
           <conversionPattern value="%thread"/>
         </layout>
       </parameter>
       <parameter>
         <parameterName value="@Message"/>
         <dbType value="String"/>
         <size value="255"></size>
         <layout type="log4net.Layout.PatternLayout">
           <conversionPattern value="%thread"/>
         </layout>
       </parameter>
       <parameter>
         <parameterName value="@Exception"/>
         <dbType value="String"/>
         <size value="255"></size>
         <layout type="log4net.Layout.ExceptionLayout"/>
       </parameter>
     </appender>
     <!--把日志信息输出到控制台-->
     <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
       <!--日志在日志文件中的布局格式-->
       <layout type="log4net.Layout.PatternLayout">
         <header value="------------------------------------------------------------"/>
         <ConversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n" />
       </layout>
     </appender>
     <root>
       <!--设置日志输出级别-->
       <level value="INFO"></level>
       <!--以文件的形式记录日志-->
       <appender-ref ref="RollingLogFileAppender"></appender-ref>
       <!--以控制台的形式记录日志-->
       <appender-ref ref="ConsoleAppender"></appender-ref>
       <!--以数据库的形式记录日志-->
       <appender-ref ref="AdoNetAppender"></appender-ref>
     </root>
   </log4net>
   <startup>
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
   </startup>
 </configuration>

在程序中使用log4net记录日志:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;

namespace Log4netDemo
{
    class Program
    {        
        static void Main(string[] args)
        {
            //创建文件对象
            ILog log = LogManager.GetLogger("log4netDemo");
            //开启配置
            log4net.Config.XmlConfigurator.Configure();
            log.Debug("我是Debug");
            log.Info("我是Info");
            log.Error("我是Error");

            Console.ReadKey();
        }
    }
}

输出结果(以控制台为例):

在config文件中设置的日志输出级别是INFO,而Debug的级别小于INFO,所以只输出Info和Error。

在WebForm中也可以使用Log4net,如果是web项目,需要在global.asax的Application_Start方法中配置web.config的引用,log4net.Config.XmlConfigurator.Configure();   

到此这篇关于.net项目使用日志框架log4net的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .net项目使用日志框架log4net

本文链接: https://www.lsjlt.com/news/140474.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .net项目使用日志框架log4net
    目录一、log4net简介二、log4net结构1、Logger:2、APPender:3、Filter:4、Layout:5、Object Render三、Log4net参数:四、...
    99+
    2022-11-13
  • .Net使用日志框架NLog
    在Nuget中安装NLog NLog可以直接使用Nuget安装:PM > Install-Package Nlog 使用NLog NLog的使用方式基本上和其它的Log库差不多...
    99+
    2022-11-13
  • .NET日志框架Nlog使用介绍
    目录快速安装快速配置快速使用详解配置添加支持Console输出输出至CSV文件配置日志大小配置日志分级配置生成规则日志过滤器条件语言条件函数NLog是一个基于.NET平台编写的类库,...
    99+
    2022-11-13
  • .NET日志框架Nlog怎么使用
    这篇文章主要介绍“.NET日志框架Nlog怎么使用”,在日常操作中,相信很多人在.NET日志框架Nlog怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.NET日志框架Nlog怎么使用”的疑惑有所帮助!...
    99+
    2023-06-29
  • .Net怎么使用日志框架NLog
    这篇文章主要讲解了“.Net怎么使用日志框架NLog”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.Net怎么使用日志框架NLog”吧!在Nuget中安装NLogNLog可以直接使用Nuge...
    99+
    2023-07-02
  • .net日志框架Serilog怎么使用
    本篇内容介绍了“.net日志框架Serilog怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先安装Nuget包:Install-P...
    99+
    2023-07-02
  • 在.NET 6中使用日志组件log4net的方法
    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net...
    99+
    2022-11-12
  • ASP 日志框架 path:如何在项目中正确地使用它?
    ASP 日志框架 path 是一款非常实用的日志工具,它能够帮助开发人员在项目中记录各种事件,从而更好地理解应用程序在运行过程中的行为。在本文中,我们将介绍如何在项目中正确地使用 ASP 日志框架 path,以及如何在代码中添加日志记录功...
    99+
    2023-09-27
    日志 框架 path
  • Python 日志框架和 Spring:哪个更适合你的项目?
    在软件开发中,日志记录是一个非常重要的环节。它可以帮助我们追踪程序运行时的状态,排查问题,同时也可以帮助我们对程序进行性能分析和优化。在开发过程中,我们常常需要使用一些日志框架来帮助我们记录日志。其中,Python 和 Spring 都有...
    99+
    2023-06-25
    日志 框架 spring
  • .Net Core3.0 WebApi 项目框架搭建之使用Serilog替换掉Log4j
    为什么使用Serilog Serilog 是一个用于.NET应用程序的日志记录开源库,配置简单,接口干净,并可运行在最新的.NET平台上,与其他日志库不同, Serilog 是以功能...
    99+
    2022-11-13
  • 用 Python 日志框架替换 Spring,你的项目会变得更好吗?
    在软件开发过程中,日志是一项非常重要的工具。它不仅可以帮助开发人员调试代码,还可以提供关键的信息以便于追踪和排除问题。在 Java 开发中,Spring 框架提供了一套完整的日志系统。然而,在 Python 中,我们可以使用不同的日志框架...
    99+
    2023-06-25
    日志 框架 spring
  • Go框架和Laravel:哪个更适合在大型项目中使用日志记录?
    随着软件系统规模的不断扩大,日志记录变得越来越重要。日志记录可以帮助我们追踪问题、调试代码,甚至在系统崩溃时恢复数据。在这篇文章中,我们将探讨Go框架和Laravel哪个更适合在大型项目中使用日志记录。 Go框架 Go是一种高效、简单和可...
    99+
    2023-06-04
    框架 日志 laravel
  • Laravel日志和Go框架日志:哪个更容易使用?
    随着Web应用程序的不断发展,日志记录已成为一项必不可少的任务。对于开发人员来说,日志记录是一种追踪和调试应用程序的重要方式。在本文中,我们将比较Laravel和Go框架的日志记录功能,以便开发人员可以更好地了解哪种框架更适合他们的需求。...
    99+
    2023-06-04
    框架 日志 laravel
  • 使用Django框架创建项目
    目录一、Django 管理工具二、创建第一个项目三、视图和 URL 配置四、path() 函数五、使用PyCharm创建Django项目1、打开PyCharm,新建项目2、通过命令行...
    99+
    2022-11-11
  • golang默认Logger日志库在项目中使用Zap日志库
    目录在Go语言项目中使用Zap日志库介绍默认的Go Logger日志库实现Go Logger设置Logger使用LoggerLogger的运行Go Logger的优势和劣势优势劣势U...
    99+
    2022-11-13
  • Python 第三方日志框架loguru使用
    解决中文乱码问题 项目地址 github: https://github.com/Delgan/loguru 文档:https://loguru.readthedocs.io/en/stable/index.html...
    99+
    2022-06-02
    Python 日志框架loguru Python 第三方日志框架
  • 如何使用 Git 记录 PHP 项目日志?
    Git 是一款强大的版本控制工具,它可以帮助我们记录项目的历史变更,同时也是开源社区中广泛使用的工具。对于 PHP 开发者来说,如何使用 Git 记录项目日志是一个非常重要的问题。在本文中,我们将介绍如何使用 Git 记录 PHP 项目日志...
    99+
    2023-09-07
    npm git 日志
  • SpringCloud使用logback日志框架教程详解
    目录前言一.依赖引入二.logback-spring.xml配置其中要修改配置的地方:三.配置文件application.properties所需配置1.配置文件中声明项目名称:2....
    99+
    2023-05-19
    springcloud LogBack日志框架 springcloud LogBack
  • 如何在Python 中使用loguru日志框架
    如何在Python 中使用loguru日志框架?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装pip install loguru输出日志...
    99+
    2023-06-15
  • Go日志:如何在Spring项目中使用Git进行日志记录?
    日志记录是任何应用程序中必不可少的一部分,因为它可以帮助开发者定位并解决问题。在Go语言中,我们可以使用标准库中的log包来记录日志。但是,如果我们在一个Spring项目中使用Go语言进行开发,我们可能需要将日志记录到Git中,这样可以更...
    99+
    2023-08-05
    日志 spring git
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作