返回顶部
首页 > 资讯 > 精选 >怎么在.net中使用log4net
  • 360
分享到

怎么在.net中使用log4net

2023-06-22 03:06:17 360人浏览 泡泡鱼
摘要

小编给大家分享一下怎么在.net中使用log4net,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建日志记录步骤第一步,当然是添加log4net.dll的引用啦

小编给大家分享一下怎么在.net中使用log4net,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创建日志记录步骤

第一步,

当然是添加log4net.dll的引用啦

第二步,

在AssemblyInfo.cs文件中添加下面一句话:

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

这句话的意思是log4net会自动寻找配置文件App.config或Web.config从而获得并加载其中的配置信息。如果想log4net随时监视配置文件以便重新加载的话就要这样写按照上面一样写(winform程序ConfigFile为App.config)。

第三步,

配置Web.config。

<configuration>   <configSections>         <!--注意:这里需要添加-->        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>   </configSections>  <connectionStrings>    <add name="ApplicationServices"         connectionString="data source=.\sqlEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"         providerName="System.Data.SqlClient" />  </connectionStrings>        <!--注意:这里需要添加-->    <log4net>          <!--定义输出到文件中-->        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">            <!--定义文件存放位置-->            <file value="C:\log.txt" />            <appendToFile value="true" />            <rollingStyle value="Date" />            <datePattern value="yyyyMMdd-HH:mm:ss" />            <layout type="log4net.Layout.PatternLayout">                <!--输出格式-->                <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->                <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />            </layout>        </appender>          <!--定义输出到控制台命令行中-->        <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />            </layout>        </appender>          <!--定义输出到windows事件中-->        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />            </layout>        </appender>          <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->        <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">            <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />            <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />            <!--定义各个参数-->            <parameter>                <parameterName value="@logDate" />                <dbType value="String" />                <size value="240" />                <layout type="log4net.Layout.PatternLayout">                    <conversionPattern value="%date" />                </layout>            </parameter>            <parameter>                <parameterName value="@thread" />                <dbType value="String" />                <size value="240" />                <layout type="log4net.Layout.PatternLayout">                    <conversionPattern value="%thread" />                </layout>            </parameter>            <parameter>                <parameterName value="@logLevel" />                <dbType value="String" />                <size value="240" />                <layout type="log4net.Layout.PatternLayout">                    <conversionPattern value="%level" />                </layout>            </parameter>            <parameter>                <parameterName value="@logger" />                <dbType value="String" />                <size value="240" />                <layout type="log4net.Layout.PatternLayout">                    <conversionPattern value="%logger" />                </layout>            </parameter>            <parameter>                <parameterName value="@message" />                <dbType value="String" />                <size value="240" />                <layout type="log4net.Layout.PatternLayout">                    <conversionPattern value="%message" />                </layout>            </parameter>        </appender>          <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->        <root>            <!--文件形式记录日志-->            <appender-ref ref="LogFileAppender" />            <!--控制台控制显示日志-->            <appender-ref ref="ConsoleAppender" />            <!--Windows事件日志-->            <!--<appender-ref ref="EventLogAppender" />-->            <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉                <appender-ref ref="AdoNetAppender_Access" />            -->        </root>     </log4net>    <system.web>    <compilation debug="true" targetFramework="4.0" />    <HttpModules>       <add name="fileUpload" type="WebApplication3.ProcessFileModule"/>    </httpModules>    <authentication mode="FORMs">      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />    </authentication>     <membership>      <providers>        <clear/>        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"             enablePassWordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"             applicationName="/" />      </providers>    </membership>     <profile>      <providers>        <clear/>        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>      </providers>    </profile>     <roleManager enabled="false">      <providers>        <clear/>        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />      </providers>    </roleManager>    <httpRuntime maxRequestLength="10240000"/>  </system.web>   <system.webServer>    <modules runAllManagedModulesForAllRequests="true"/>  </system.webServer> </configuration>

上面这段配置取自周公,配置的说明上面已经注释的比较详细了。

第四步,

在程序中记录信息。我们在项目下Default.aspx的Page_Load方法加入如下代码:

//获得log4net实例ILog log = log4net.LogManager.GetLogger("LogFileAppender");log.Info("Default.aspx下面的PageLoad方法被执行");

然后运行项目,可以发现在c:\log4netfile.txt中已经记录了一条日志信息:

记录时间:2011-04-21 21:26:17,729 线程ID:[4] 日志级别:INFO  出错类:LogFileAppender property:[(null)] - 错误描述:Default.aspx下面的PageLoad方法被执行

通过上面这几步我想您已经能够为程序创建一些简单日志记录功能了。下面我们再来详细说说log4net其他的一些使用方法与特点。

log4net详细说明

这里我通过问答的形式来说明log4net的一些应用。

1.log4net总共有几种记录方式,每种方式该如何配置与使用?

Log4net目前支持的输出方式包括:

  • 1 AdoNetAppender
    将日志记录到数据库中。可以采用SQL和存储过程两种方式。

  • 2 AnsiColorTerminalAppender
    在ANSI 窗口终端写下高亮度的日志事件。

  • 3 AspNetTraceAppender
    能用asp.net中Trace的方式查看记录的日志。

  • 4 BufferingForwardingAppender
    在输出到子Appenders之前先缓存日志事件。

  • 5 ConsoleAppender
    将日志输出到控制台。

  • 6 EventLogAppender
    将日志写到Windows Event Log.

  • 7 FileAppender
    将日志写到文件中。

  • 8 LocalSyslogAppender
    将日志写到local syslog service (仅用于UNIX环境下).

  • 9 MemoryAppender
    将日志存到内存缓冲区。

  • 10 NetSendAppender
    将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

  • 11 RemoteSyslogAppender
    通过UDP网络协议将日志写到Remote syslog service。

  • 12 RemotingAppender
    通过.NET Remoting将日志写到远程接收端。

  • 13 RollingFileAppender
    将日志以回滚文件的形式写到文件中。

  • 14 SmtpAppender
    将日志写到邮件中。

  • 15 TraceAppender
    将日志写到.NET trace 系统。

  • 16 UdpAppender
    将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。

可以看到目前支持的方式还是很多的,我这里调几个认为常用的做个例子。

文件的方式我们上面已经讲过了,这里不再做例子了。

数据库方式:

首先,添加数据库记录appender

<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">        <!--数据库连接字符串-->        <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />        <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />        <!--定义各个参数-->        <parameter>            <parameterName value="@logDate" />            <dbType value="String" />            <size value="240" />            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%date" />            </layout>        </parameter>        <parameter>            <parameterName value="@thread" />            <dbType value="String" />            <size value="240" />            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%thread" />            </layout>        </parameter>        <parameter>            <parameterName value="@logLevel" />            <dbType value="String" />            <size value="240" />            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%level" />            </layout>        </parameter>        <parameter>            <parameterName value="@logger" />            <dbType value="String" />            <size value="240" />            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%logger" />            </layout>        </parameter>        <parameter>            <parameterName value="@message" />            <dbType value="String" />            <size value="240" />            <layout type="log4net.Layout.PatternLayout">                <conversionPattern value="%message" />            </layout>        </parameter>    </appender>

然后建立c:log4net.mdb 数据库,并在代码中启用数据库记录方式:

//获得log4net实例ILog log = log4net.LogManager.GetLogger("AdoNetAppender_Access");log.Debug("Default.aspx下面的PageLoad方法被执行");

这样日志就被记录到数据库中了。

2.log4net如何过滤我想要的日志信息,比如一个日志中只记录程序错误日志?

这个需求可以通过配置filter来实现。具体操作如下:

全局方式:

这种方式会将级别应用于所有的日志输入方式。具体操作为在root节点下添加:

<!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF    比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录--><!--如果没有定义LEVEL的值,则缺省为DEBUG--><level value="ERROR" />

这样对于所有的日志记录方式,所有地域ERROR级别的都不会被记录了。

单独配置级别方式:

该方式不会影响其他的日志输入方式。方法如下为,在具体的appender下添加filter:

<filter type="log4net.Filter.LevelRangeFilter">     <param name="LevelMin" value="ERROR" />     <param name="LevelMax" value="Fatal" /> </filter>

这种方式可以配置记录级别的方位,如果只需要记录一种,则最大和最小设置一样就行了。

3.你上面的日志输出格式我不喜欢,如何在log4net中配置我想要的日志输出格式?

log4net的输入格式定义在每个appender的layout中。具体的有以下内置可选项:

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 

%n(new line):换行 

%d(datetime):输出当前语句运行的时刻 

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 

%t(thread id):当前语句所在的线程ID 

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 

%c(class):当前日志对象的名称,例如: 

%f(file):输出语句所在的文件名。 

%l(line):输出语句所在的行号。 

%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

通过这些东西,你可以任意组合你喜欢的输出格式内容。

4.有没有方式控制程序自动按日期记录日志信息,即每天的日志都在不同的日志文件中?

其实这种方式对应于一种特定的记录方式:RollingFileAppender。这种方式也是基于文件记录的,不过他提供更加灵活的日志记录方式。具体说来他可以按日志文件的大小或者日志记录的时间进行自动变换日志文件。

按每天不同的日期进行记录分类:

<appender name="RollingLogFileAppenderEveryMin" type="log4net.Appender.RollingFileAppender"> <!--日志文件名开头--> <file value="c:\logfile.txt" /> <!--是否追加到文件--> <appendToFile value="true" /> <!--变换的形式为日期--> <rollingStyle value="Date" /> <!--日期的格式,每分钟换一个文件记录--> <datePattern value="yyyyMMdd-HHmm" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>

按照日志文件的大小进行变换,通过这种方式可以有效降低日志文件体积膨胀的问题:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <!--日志文件名--> <file value="c:\log.txt"/> <!--是否在文件中追加--> <appendToFile value="true"/> <!--按照文件的大小进行变换日志文件--> <rollingStyle value="Size"/> <!--最大变换数量,如果超过这个数量则从第一个文件开始复写--> <maxSizeRollBackups value="10"/> <!--最大文件大小,支持KB,MB,GB--> <maximumFileSize value="100KB"/> <!--日志文件名是否为静态--> <staticLogFileName value="true"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/> </layout> </appender>

以上是“怎么在.net中使用log4net”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 怎么在.net中使用log4net

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

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

猜你喜欢
  • 怎么在.net中使用log4net
    小编给大家分享一下怎么在.net中使用log4net,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建日志记录步骤第一步,当然是添加log4net.dll的引用啦...
    99+
    2023-06-22
  • 在.NET 6中使用日志组件log4net的方法
    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net...
    99+
    2024-04-02
  • .net项目使用日志框架log4net
    目录一、log4net简介二、log4net结构1、Logger:2、APPender:3、Filter:4、Layout:5、Object Render三、Log4net参数:四、...
    99+
    2024-04-02
  • AgileConfig怎么在.NET中使用
    今天就跟大家聊聊有关 AgileConfig怎么在.NET中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。架构图部署服务端首先,我们需要部署服务端,包含了控制台UI和节点服务,节...
    99+
    2023-06-15
  • Quartz在.NET中怎么使用
    本篇内容主要讲解“Quartz在.NET中怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Quartz在.NET中怎么使用”吧!一、背景例如需要在某年某月去将数据库的某个数据更新或者同步,...
    99+
    2023-06-25
  • .NET6在WebApi中使用日志组件log4net
    目录1、安装依赖2、配置文件3、注册组件4、使用1、安装依赖 Microsoft.Extensions.Logging.Log4Net.AspNetCore 2、配置文件 <...
    99+
    2024-04-02
  • asp.net中软件使用log4net
    这篇文章主要为大家展示了“asp.net中软件使用log4net”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“asp.net中软件使用log4net”这篇文章吧。说明:本程序演示如何利用log4...
    99+
    2023-06-22
  • asp.net中使用log4net详解
    说明:本程序演示如何利用log4net记录程序日志信息。log4net是一个功能著名的开源日志记录组件。利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日...
    99+
    2024-04-02
  • .NET6在WebApi中如何使用日志组件log4net
    这篇文章主要介绍.NET6在WebApi中如何使用日志组件log4net,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、安装依赖Microsoft.Extensions.Logging.Log4Net.AspNet...
    99+
    2023-06-22
  • C#中log4net有什么用
    这篇文章给大家分享的是有关C#中log4net有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Log4net是一个第三方开源组件,它设计的主要目的是组合,生成日志信息,同时将配置保存到各种存储介质或者展现平...
    99+
    2023-06-17
  • .NET Core中怎么使用Autofac
    今天小编给大家分享一下.NET Core中怎么使用Autofac的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Au...
    99+
    2023-06-29
  • 如何在.NET中使用Redis
    如何在.NET中使用Redis?相信很多新手小白还没学会这个技能,通过这篇文章的总结,希望你能学会这个技能。以下资料是实现的步骤。Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博、Gi...
    99+
    2024-04-02
  • NET中ExecuteReader方法怎么使用
    在.NET中,使用ExecuteReader方法来执行SQL查询并返回一个DataReader对象,可以使用以下步骤:1. 创建一个...
    99+
    2023-09-26
    NET
  • Quartz在.NET中的使用教程
    目录一、背景二、Quartz三、传递参数四、在scheduler中注册监听器五、可视化管理界面六、配置文件配置任务一、背景 例如需要在某年某月去将数据库的某个数据更新或者同步,又或者...
    99+
    2024-04-02
  • redis怎么使用net
    使用 .net 访问 redis 涉及使用 stackexchange.redis 客户端库,它提供连接创建、数据存储/检索、数据类型支持、事务、发布/订阅和集群支持等功能。 使用 ....
    99+
    2024-05-21
    redis git c#
  • .NET中负载均衡怎么使用
    本篇内容介绍了“.NET中负载均衡怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、简介负载均衡(Load Balance),简称 ...
    99+
    2023-07-02
  • ASP.NET调试API之Log4net怎么用
    这篇文章主要介绍了ASP.NET调试API之Log4net怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 简介1 Log4net的优点:几乎所有的大型应用都会有自己的...
    99+
    2023-06-17
  • 在NET Core 中获取 CPU 使用率
    以下文章来源于微信公众号DotNetCore实战  在 .NET Framework 中,很多人会用 PerformanceCounter 类做这件事情, 如下代码:   ...
    99+
    2024-04-02
  • 怎么在.NET中使用MongoDB以及基本的CRUD操作
    这篇文章主要介绍了怎么在.NET中使用MongoDB以及基本的CRUD操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MongoDBNoS...
    99+
    2024-04-02
  • 在.NET平台怎么使用ReflectionDynamicObject优化反射
    本文小编为大家详细介绍“在.NET平台怎么使用ReflectionDynamicObject优化反射”,内容详细,步骤清晰,细节处理妥当,希望这篇“在.NET平台怎么使用ReflectionDynamicObject优化反射”文章能帮助大家...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作