log4net日志的简单配置

摘要:
在<在节点<配置>compilationdebug=“true”targetFramework=“4.5”/>--定义输出到文件-->appendername=“LogFileAppender”type=“log4net.Appender.RollingFileAppander”>

                     说起来log4net,我一直都知道这个的存在,但实际在项目中还真是没有去自己写过的那,这一次我在项目完成后并没有着急下一个项目的开始,于是突然想起来是否添加一个日志的编写,于是开始了log4net的总结,下面就简单的总结一下自己在添加log4net时间注意的。

                     1.首先我们在添加log4net之前需要添加其引用,这里就通过在web网站的引用添加其nuget包引用来添加,如下所示:

                     log4net日志的简单配置第1张

                     添加引用完成后,我们打开web网站引用即可看到存在log4net,这就意味着我们已经添加log4net引用成功。

                     2.下面我们就打开web网站的Properties文件夹下的AssemblyInfo.cs类文件,然后添加文件的配置:

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

                      3.ConfigFile是指定log4net使用.config文件来读取配置信息,这里我新创建了一个config文件,专业用来配置log4net。也可以将其配置在web.config文件中,在log.config中,将其log4net文件配置在<configuration>节点中.

             <?xml version="1.0" encoding="utf-8"?>
              <configuration>
                <system.web>
                  <compilation debug="true" targetFramework="4.5" />
                  <httpRuntime targetFramework="4.5" />
                </system.web>
  
  
                <log4net>
                  <!--定义输出到文件中-->
                  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
                  <!--定义文件存放位置-->
                  <file value="~logs/"/>
                  <appendToFile value="true"/>
                   <rollingStyle value="Date"/>
                   <datePattern value="yyyy-MM-dd.txt"/>
                   <staticLogFileName value="false"/>
                   <layout type="log4net.Layout.PatternLayout">
                   <!--每条日志末尾的文字说明-->
                   <footer value="" />
                   <!--value类型:"记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"-->
                   <conversionPattern value="%date ThreadID:[%thread] Log Level:%-5level Class:%logger Desp:%message%newline"/>
                   </layout>
                  </appender>
    
                  <!--定义文件输出的名字以及文件的类型-->
                  <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
                  <!--定义文件存放的位置-->
                    <file type="log4net.Util.PatternString" value="..log\%date{yyyyMMdd}JOB_%property{jobid}_%date{yyyyMMdd}.log" />
                    <!--默认为true。当文件存在时,是否在原文件上追加内容,可是True/false,-->
                   <appendToFile value="true" />
                   <!--默认为true。为true时,RollingStyler的date值将无效。且为true时,需要在file里指定文件名,所有日志都会记录在这个文件里,false时间是相反的-->
                   <StaticLogFileName value="true"/>
                   <!--文件锁类型,RollingFileAppender本身并不是线程安全的,如果在程序中没有进行线程安全的限制,可以在这里进行配置,确保写入时的安全;文件锁定的模式有三个:
                   FileAppender.ExclusiveLock, FileAppender.MinimalLock and FileAppender.InterProcessLock,默认是第一个值,排他锁定,一次值能有一个进程访问文件,关闭后
                   另外一个进程才可以访问;第二个是最小锁定模式,允许多个进程可以同时写入一个文件;-->
                   <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

                   <layout type="log4net.Layout.PatternLayout">
                   <!--value类型:"记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"-->
                   <conversionPattern value="%date{yyyy/MM/dd HH:mm:ss} %message%newline" />
                   </layout>
                   <filter type="log4net.Filter.LevelRangeFilter">
                   <levelMin value="INFO" />
                   <levelMax value="ERROR" />
                   </filter>
                  </appender>
                   <root>
                    <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
                    <!--如果定义级别为INFO,则INFO级别向下的级别,例如DEBUG日志将不会被记录-->
                    <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
                    <level value="INFO" />
                    <appender-ref ref="ErrorLogFileAppender"/>
                   </root>
                 </log4net>
               </configuration>

                           针对filter我也是感觉好奇,于是查找了一些资料,看到友友的总结,我还是拿来用一下,希望下次我在写log4net时间能够更快的寻找的到的啦,嘿嘿,下面就针对filter来总结一下,如下所示:

                <!--log4net里面的filter类常用的为:
                1、DenyAllFilter
                 拒绝所用的日志输出-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <filter type="log4net.Filter.DenyAllFilter" />
                <!--上面的配置是如果日志的输出级别不符合DEBUG要求的话,则不输出任何日志。

                2、LevelMatchFilter
                 这个类里面有两个属性,一个是LevelToMatch这个属性,是要匹配输出日志的级别,例如:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <!--这样的话,只有级别是DEBUG的日志才能输出。

                另外这个类还有一个重要的属性就是AcceptOnMatch这个属性是设置如果这个条件匹配的话,是否接受输出打印,比如说:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                </filter>
                <filter type="log4net.Filter.StringMatchFilter">
                 <param name="StringToMatch" value="debug" />
                </filter>

                <!--如果日志的级别为DEBVG的话,也就是说符合了第一个Filter的条件,日志就输出,则StringMatchFilter就不执行了。如果这样写的话,就会继续向下执行过滤:-->
                <filter type="log4net.Filter.LevelMatchFilter">
                 <param name="LevelToMatch" value="DEBUG" />
                 <AcceptOnMatch value="false"></AcceptOnMatch>
                </filter>
                <filter type="log4net.Filter.StringMatchFilter">
                  <param name="StringToMatch" value="debug" />
                </filter>
                <!--如果这样写的话,即使第一个Filter符合了条件则第二个Filter也会继续执行。

                3、LevelRangeFilter
                 配置文件是这样的:-->
                <filter type="log4net.Filter.LevelRangeFilter">
                 <param name="LevelMin" value="DEBUG" />
                 <param name="LevelMax" value="ERROR" />
                </filter>

                <!--4、LoggerMatchFilter
                 配置文件是这样的:-->
                <filter type="log4net.Filter.LoggerMatchFilter">
                 <param name="LoggerToMatch" value="Client" />
                </filter>

                <!--5、StringMatchFilter
                配置文件是这样的:-->
                <filter type="log4net.Filter.StringMatchFilter">
                 <param name="StringToMatch" value="/blog/Client.Program" />
                </filter>

                           4.日志的配置文件已经写好,下面我们就去Global.asax文件中进行配置,如下所示:

                 ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

                            在Global.asax文件Application_Start方法下添加I上面的代码块即可。

                            5.我们在容易出错的类中添加我们的报错信息,例如简单的报错ex错误,如下:

                  try
                   {
                   }
                  catch (System.Exception ex)
                   {
                        LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType).Error(ex.Message);
                   }

                              好啦,这样我们在出错时间就会创建log日志,然后告诉我们问题在哪里,嘿嘿,就总结到这里啦,加油亲们!

免责声明:文章转载自《log4net日志的简单配置》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP Rabbitmq 报错Broken pipePrimetime里面的脚本小技巧下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

黑客入侵的常法

      1.无论什么站,无论什么语言,我要渗透,第一件事就是扫目录,最好一下扫出个上传点,直接上传 shell ,诸位不要笑,有时候你花很久搞一个站,最后发现有个现成的上传点,而且很容易猜到,不过这种情况发生在 asp 居多!    2.asp ( aspx )+MSSQL 先考虑注入,一般的注入都有 DBowner 权限可以直接写 shell ;如果...

MYSQL 命令行工具自动登录的方法

MYSQL 命令行工具自动登录的方法 1. 需求提出 由于在linux 环境下,经常需要使用mysql(command-line tool) 终端连接到MYSQL DB服务。 其中大致的语法如下: mysql [options] db_name 比较重要的option 参数有: --database=db_name, -D db_name --host=...

20150916自动化测试之Appinum For Android(环境搭建之下载更新安装AndroidSDK包)

  在经历一个多星期的延迟后,终究是运气极好,解决了Android SDK更新时遇到的google访问问题   遇到的问题:      解决方法:   1.启动 Android SDK Manager ;  2.打开主界面,选择Tools->Options;  3.在弹出的窗口中,代理服务器输入mirrors.neusoft.edu.cn,端口:80...

svg 直线水平渐变为什么没有效果,必须得是一条倾斜的不水平的直线才有渐变效果呢??

参考:https://blog.csdn.net/u012260672/article/details/80905631 对x1=x2(没有宽度)或者y1=y2(没有高度)的直线(line以及path,如果,stroke里使用的是渐变效果,那么,在各种浏览器上都会出现同一个BUG,这条线会消失。关键字objectBoundingBox这玩意儿,在元素没有宽...

Tomcat学习总结(10)——Tomcat多实例冗余部署

昨天在跟群友做技术交流的时候,了解到,有很多大公司都是采用了高可用的,分布式的,实例沉余1+台。但是在小公司的同学也很多,他们反映并不是所有公司都有那样的资源来供你调度。往往公司只会给你一台机器,因为有些应用挂了公司也不会有损失的,我们往往一台机器就可以搞定。 但是,我们也要为我们做出来的应用负责,毕竟东西做出来是为了给人用的,如果做出来的东西经常挂了,...

java中远程http文件上传及file2multipartfile

    工作中有时会遇到各种需求,你得变着法儿去解决,当然重要的是在什么场景中去完成。 比如Strut2中file类型如何转换成multipartfile类型,找了几天,发现一个变通的方法记录如下(虽然最后没有用上。。): 1 private static MultipartFile getMulFileByPath(String picPath) {...