当前位置: 移动技术网 > IT编程>开发语言>.net > Log4Net使用学习笔记

Log4Net使用学习笔记

2018年11月26日  | 移动技术网IT编程  | 我要评论

项目源文件下载https://files.cnblogs.com/files/ckym/log4nettestsourcecode.zip

log4net是一款非常好用的日志记录的框架,使用它可以实现将日志输出到控制台,文件,数据库等功能

网上有很多log4net的使用教程,一些非常简陋,一些又很深奥,我学习使用log4net的时候查阅了很多资料,为了可以记住相关功能的实现方式,故记录这篇文章,仅用于初学者使用此文档来进行学习,如有错误,请大神不吝赐教,更多深入用法和原理请大家查询相关文档。

  1. 1.   新建一个控制台应用程序(core)
  2. 2.   在nuget中安装log4net完成之后新建一个log4net的配置文件,配置文件示例如下

 <?xml version="1.0" encoding="utf-8" ?>

<log4net>

  <appender name="consoleappender" type="log4net.appender.consoleappender">

    <layout type="log4net.layout.patternlayout" value="%date [%thread] %-5level %logger - %message%newline" />

  </appender>

 

  <appender name="fileappender" type="log4net.appender.fileappender">

    <file value="log-file.log" />

    <appendtofile value="true" />

    <layout type="log4net.layout.patternlayout">

      <conversionpattern value="%date [%thread] %-5level %logger [%property{ndc}] - %message%newline" />

    </layout>

  </appender>

 

  <appender name="rollinglogfileappender" type="log4net.appender.rollingfileappender">

    <file value="log/" />

    <appendtofile value="true" />

    <rollingstyle value="composite" />

    <staticlogfilename value="false" />

    <datepattern value="yyyymmdd'.log'" />

    <maxsizerollbackups value="10" />

    <maximumfilesize value="1mb" />

    <layout type="log4net.layout.patternlayout">

      <conversionpattern value="%date [%thread] %-5level %logger [%property{ndc}] - %message%newline" />

    </layout>

  </appender>

 

  <!-- name属性指定其名称,type则是log4net.appender命名空间的一个类的名称,意思是,指定使用哪种介质-->

  <appender name="adonetappender" type="microknights.logging.adonetappender, log4net.adonetappender">

    <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->

    <buffersize value="1" />

    <!--日志数据库连接串-->

    <connectiontype value="system.data.sqlclient.sqlconnection, system.data" />

    <connectionstring value="data source=(localdb)\mssqllocaldb;initial catalog=sctest;integrated security=true;connect timeout=30;encrypt=false;trustservercertificate=false;applicationintent=readwrite;multisubnetfailover=false;" />

    <!--日志数据库脚本-->

    <commandtext value="insert into sys_logs (id,createtime,createuser,loglevel,message,userip) values (4,@createtime,@createuser,@loglevel,@custommessage,@userip)" />

    <!--日志时间logdate -->

    <parameter>

      <parametername value="@createtime" />

      <dbtype value="datetime" />

      <layout type="log4net.layout.rawtimestamplayout" />

    </parameter>

    <parameter>

      <parametername value="@loglevel" />

      <dbtype value="string" />

      <size value="200" />

      <layout type="log4net.layout.patternlayout">

        <conversionpattern value="%p" />

      </layout>

    </parameter>

    <parameter>

      <parametername value="@custommessage" />

      <dbtype value="string" />

      <size value="3000" />

      <layout type="log4nettest.customlayout,log4nettest">

        <conversionpattern value="%custommessage{custommessage}" />

      </layout>

    </parameter>

    <!--自定义username -->

    <parameter>

      <parametername value="@createuser" />

      <dbtype value="string" />

      <size value="30" />

      <layout type="log4nettest.customlayout,log4nettest" >

        <conversionpattern value = "%createuser{createuser}"/>

      </layout>

    </parameter>

    <parameter>

      <parametername value="@userip" />

      <dbtype value="string" />

      <size value="20" />

      <layout type="log4nettest.customlayout,log4nettest" >

        <conversionpattern value = "%userip{userip}"/>

      </layout>

    </parameter>

  </appender>

 

  <!-- setup the root category, add the appenders and set the default level -->

  <root>

    <level value="all" />

    <appender-ref ref="consoleappender" />

    <appender-ref ref="fileappender" />

    <appender-ref ref="rollinglogfileappender" />

    <appender-ref ref="adonetappender" />

  </root>

</log4net>

接着在app.config中添加如下行

<configuration>

  <section name="log4net" type="log4net.config.log4netconfigurationsectionhandler,log4net" />

</configuration>

然后再main文件中添加如下代码

iloggerrepository repository = logmanager.createrepository("mycustomrepository");

            //basicconfigurator.configure(repository);//简单配置,只能写日志到控制台

            //读取配置文件的方式实现

            //var log4netconfig = new xmldocument();

            //log4netconfig.load(file.openread("log4net.config"));

            //xmlconfigurator.configure(repository, log4netconfig["log4net"]);

            //直接使用文件的方式

            //注意,要求所有的配置文件必须放置在debug文件夹下面,否则会造成程序不报错,但是也不能正确写入文件的问题

            xmlconfigurator.configure(repository, new fileinfo("log4net.config"));

            ilog log = logmanager.getlogger(repository.name,"mycustomlogger");

 

             //log.debug("this is a log info from log4net test");

             //log.info("netcorelog4net log");

             //log.info("test log");

             //log.error("error");

             //log.info("linezero");

 

             //记录日志到数据库

            customloginfo loginfo = new customloginfo() { id = new random().next(1, 100), message = "this is a log info by log4net", createuser = "sc", userip = dns.gethostaddresses(dns.gethostname())[0].tostring() };

            log.debug(loginfo);

            console.writeline("日志记录完成!");

            console.readkey();

根据注释取消或者注释掉相关的代码,点击运行,可以看到日志输出到文件,或者控制台,或者数据库文件

异常处理:

  1. 找不到adonetappender

在使用log4net2.0.8的时候我们运行会发现报错,因为2.0.8的版本没有提供adonetappender,所以需要我们自己去实现,源代码在项目中可以找到,其他数据库,例如mysql,oracle等数据库一样的实现方式

  1. 实现自定义的转换器和布局,这个可以参考原代码的实现和注释,即可实现相关的功能(注意需要反射的只是).

下面是输出的日志模板的一下缩写对应的关系,可以参考,这些是log4net中自带的转换器实现的。

1)newlinepatternconverter

作用:换行;通配符:%newline,%n

2)loggerpatternconverter

作用:显示logger名;通配符:%logger,%c

3)typenamepatternconverter

作用:显示类名;通配符:%c,%class,%type

4)datepatternconverter

作用:显示时间;通配符:%d,%date

5)exceptionpatternconverter

作用:异常信息;通配符:%exception

6)linelocationpatternconverter

作用:语句所在的行号;通配符:%l,%line

7)messagepatternconverter

作用:信息内容;通配符:%message,%m

8)levelpatternconverter

作用:消息等级;通配符:%level,%p

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网