设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间09 现在时间09 缓存数据 随缘不是听天由命,而是用豁达的心态去面对生活。心累的时候,不如换个角度看世界。新的一天,早安。

随缘不是听天由命,而是用豁达的心态去面对生活。心累的时候,不如换个角度看世界。新的一天,早安。

查看: 1564|回复: 3

.net项目使用日志框架log4net

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:224
  • 打卡月天数:0
  • 打卡总奖励:3794
  • 最近打卡:2025-04-19 13:17:05
等级头衔

等級:晓枫资讯-上等兵

在线时间
5 小时

积分成就
威望
0
贡献
443
主题
409
精华
0
金钱
5104
积分
903
注册时间
2023-1-5
最后登录
2025-4-19

发表于 2023-9-9 18:49:28 | 显示全部楼层 |阅读模式
目录
  • 一、log4net简介
  • 二、log4net结构
    • 1、Logger:
    • 2、APPender:
    • 3、Filter:
    • 4、Layout:
    • 5、Object Render
  • 三、Log4net参数:
    • 四、Log4net日志分类
      • 五、在配置中启用和关闭日志
        • 六、log4net使用
          • 1、引用log4net.dll文件
            • (1)、在Nuget中下载log4net
            • (2)、在官网下载
          • 2、在config文件中的配置
            • 3、示例程序

            一、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 调试级别

            这几种日志级别高低:

            1. FATAL>ERROR>WARA>INFO>DEBUG
            复制代码

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

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

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

            1. <root>
            2. <!--设置日志输出级别-->
            3. <level value="INFO"></level>
            4. <!--以文件的形式记录日志-->
            5. <appender-ref ref="RollingLogFileAppender"></appender-ref>
            6. <!--以控制台的形式记录日志-->
            7. <appender-ref ref="ConsoleAppender"></appender-ref>
            8. <!--以数据库的形式记录日志-->
            9. <appender-ref ref="AdoNetAppender"></appender-ref>
            10. </root>
            复制代码

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

            六、log4net使用

            1、引用log4net.dll文件

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

            (1)、在Nuget中下载log4net

            1.jpeg

            点击"安装"进行安装

            (2)、在官网下载

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

            2.jpeg

            下载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上右键选择文件属性,修改属性

            3.jpeg

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

            1. <configSections>
            2. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
            3. </configSections>
            复制代码

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

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

            4.jpeg

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

            5.jpeg

            3、示例程序

            配置文件:

            1. <?xml version="1.0" encoding="utf-8" ?>
            2. <configuration>
            3. <configSections>
            4. <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
            5. </configSections>
            6. <log4net>
            7. <!--把日志信息输出到文件里-->
            8. <!-- 日志文件部分log输出格式的设定 -->
            9. <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            10. <!--日志文件名开头-->
            11. <file value="Logs/Log_"/>
            12. <!--多线程时采用最小锁定-->
            13. <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
            14. <!--是否追加到文件,默认为true,通常无需设置-->
            15. <appendToFile value="true"/>
            16. <!--设置动态文件名-->
            17. <StaticLogFileName value="false"/>
            18. <!--变换的形式为日期,这种情况下每天只有一个日志-->
            19. <!--此时MaxSizeRollBackups和maximumFileSize的节点设置没有意义-->
            20. <!--<rollingStyle value="Date"/>-->
            21. <!--变换的形式为日志大小-->
            22. <!--这种情况下MaxSizeRollBackups和maximumFileSize的节点设置才有意义-->
            23. <RollingStyle value="Composite"/>
            24. <!--日期的格式 (yyyyMMdd),每天换一个文件记录,如不设置则永远只记录一天的日志,需设置-->
            25. <datePattern value="yyyy_MM_dd&quot;.log&quot;"/>
            26. <!--每天记录的日志文件个数,与maximumFileSize配合使用-->
            27. <MaxSizeRollBackups value="100"/>
            28. <!--每个日志文件的最大大小;可用的单位:KB|MB|GB;不要使用小数,否则会一直写入当前日志-->
            29. <maximumFileSize value="8MB"/>
            30. <!--日志格式-->
            31. <layout type="log4net.Layout.PatternLayout">
            32. <header value="------------------------------------------------------------"/>
            33. <ConversionPattern value="★★★★★★%newline%date [%thread] %-5level %logger [%ndc] - %newline%message%newline" />
            34. </layout>
            35. </appender>
            36. <!--记录日志到数据库-->
            37. <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
            38. <!--缓存:当日志达到一定的数量,在往数据库里面保存,减少数据库压力-->
            39. <bufferSize value="1"/>
            40. <!--引用的动态链接库-->
            41. <connectionType value="System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,Culture=neutral,PublicKeyToKen=b77a5c561934e089"/>
            42. <!--数据库连接字符串-->
            43. <connectionString value="Data Source=JIANGXIAOLIANG;Initial Catalog=NightCat;Integrated Security=True"/>
            44. <!--插入数据库表的SQL语句-->
            45. <commandText value="INSERT INTO [dbo].[Sys_Log]([Date],[Thread] ,[Leval],[Logger],[Message],[Exception]) VALUES (@Date ,@Thread,@Leval ,@Logger ,@Message,@Exception)"/>
            46. <!--参数-->
            47. <parameter>
            48. <parameterName value="@Date"/>
            49. <dbType value="DateTime"/>
            50. <layout type="log4net.Layout.RawTimeStampLayout"/>
            51. </parameter>
            52. <parameter>
            53. <parameterName value="@Thread"/>
            54. <dbType value="String"/>
            55. <size value="255"></size>
            56. <layout type="log4net.Layout.PatternLayout">
            57. <conversionPattern value="%thread"/>
            58. </layout>
            59. </parameter>
            60. <parameter>
            61. <parameterName value="@Leval"/>
            62. <dbType value="String"/>
            63. <size value="255"></size>
            64. <layout type="log4net.Layout.PatternLayout">
            65. <conversionPattern value="%leval"/>
            66. </layout>
            67. </parameter>
            68. <parameter>
            69. <parameterName value="@Logger"/>
            70. <dbType value="String"/>
            71. <size value="255"></size>
            72. <layout type="log4net.Layout.PatternLayout">
            73. <conversionPattern value="%thread"/>
            74. </layout>
            75. </parameter>
            76. <parameter>
            77. <parameterName value="@Message"/>
            78. <dbType value="String"/>
            79. <size value="255"></size>
            80. <layout type="log4net.Layout.PatternLayout">
            81. <conversionPattern value="%thread"/>
            82. </layout>
            83. </parameter>
            84. <parameter>
            85. <parameterName value="@Exception"/>
            86. <dbType value="String"/>
            87. <size value="255"></size>
            88. <layout type="log4net.Layout.ExceptionLayout"/>
            89. </parameter>
            90. </appender>
            91. <!--把日志信息输出到控制台-->
            92. <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
            93. <!--日志在日志文件中的布局格式-->
            94. <layout type="log4net.Layout.PatternLayout">
            95. <header value="------------------------------------------------------------"/>
            96. <ConversionPattern value="[时间]:%d%n[级别]:%p%n[内容]:%m%n%n" />
            97. </layout>
            98. </appender>
            99. <root>
            100. <!--设置日志输出级别-->
            101. <level value="INFO"></level>
            102. <!--以文件的形式记录日志-->
            103. <appender-ref ref="RollingLogFileAppender"></appender-ref>
            104. <!--以控制台的形式记录日志-->
            105. <appender-ref ref="ConsoleAppender"></appender-ref>
            106. <!--以数据库的形式记录日志-->
            107. <appender-ref ref="AdoNetAppender"></appender-ref>
            108. </root>
            109. </log4net>
            110. <startup>
            111. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
            112. </startup>
            113. </configuration>
            复制代码

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

            1. using System;
            2. using System.Collections.Generic;
            3. using System.Linq;
            4. using System.Text;
            5. using System.Threading.Tasks;
            6. using log4net;
            7. namespace Log4netDemo
            8. {
            9. class Program
            10. {
            11. static void Main(string[] args)
            12. {
            13. //创建文件对象
            14. ILog log = LogManager.GetLogger("log4netDemo");
            15. //开启配置
            16. log4net.Config.XmlConfigurator.Configure();
            17. log.Debug("我是Debug");
            18. log.Info("我是Info");
            19. log.Error("我是Error");
            20. Console.ReadKey();
            21. }
            22. }
            23. }
            复制代码

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

            6.jpeg

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

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

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


            免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
            晓枫资讯-科技资讯社区-免责声明
            免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
                  1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
                  2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
                  3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
                  4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
                  5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
            http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

              离线 

            TA的专栏

            等级头衔

            等級:晓枫资讯-列兵

            在线时间
            0 小时

            积分成就
            威望
            0
            贡献
            0
            主题
            0
            精华
            0
            金钱
            21
            积分
            22
            注册时间
            2022-12-27
            最后登录
            2022-12-27

            发表于 2024-7-17 06:26:25 | 显示全部楼层
            顶顶更健康!!!
            http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

              离线 

            TA的专栏

            等级头衔

            等級:晓枫资讯-列兵

            在线时间
            0 小时

            积分成就
            威望
            0
            贡献
            0
            主题
            0
            精华
            0
            金钱
            13
            积分
            6
            注册时间
            2024-1-14
            最后登录
            2024-1-14

            发表于 2025-2-18 04:58:47 | 显示全部楼层
            感谢楼主分享。
            http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

              离线 

            TA的专栏

            等级头衔

            等級:晓枫资讯-列兵

            在线时间
            0 小时

            积分成就
            威望
            0
            贡献
            0
            主题
            0
            精华
            0
            金钱
            17
            积分
            14
            注册时间
            2022-12-24
            最后登录
            2022-12-24

            发表于 2025-3-28 11:23:22 | 显示全部楼层
            感谢楼主,顶。
            http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
            严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
            您需要登录后才可以回帖 登录 | 立即注册

            本版积分规则

            1楼
            2楼
            3楼
            4楼

            手机版|晓枫资讯--科技资讯社区 本站已运行

            CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

            晓枫资讯--科技资讯社区

            本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

            如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

            Powered by Discuz! X3.5

            快速回复 返回顶部 返回列表