Log4Net的应用心得和体会

引言:我们在工作中经常会debug调试打log监测程序运行状况,在生产环节也会要求有相应的日志来查看当前的程序运行状况。遇到了错误我们也可以调用日志来查看是哪个环节出了错误,Log4Net就是用来输出日志的。Log4Net可以输出到文件中也可以输出到数据库中,接下来我们就记录下这两种方式。

准备工作:首先通过NuGet安装Log4Net

注意事项:

1.若要写入Mysql数据库中,首先要添加MySql.Data的引用(可通过NuGet安装)

2.若要写入SqlServer数据库,首先要添加System.Data的引用

以上两个dll右击属性将复制本地改为True,否则在调试的时候会写入数据库失败。

3.在项目中添加log4net.config文件,右击属性复制到输出目录的选项改成如果较新则复制

4.在下文中的输出到控制台在放在配置文件的Root字段中的,所以它会输出所有的日志信息,如果不需要可删除appender-ref属性

5.每个配置属性中都设置了最大输出等级和最小输出等级,可根据自己的项目需求选择性的输出日志信息

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

6.输入数据库的日志中connectionString里面的value的值就是连接项目数据库的,这个要根据自己需求修改

7.输入数据库的日志中commandText里面的value的值要自己对应自己的数据库表

譬如insert into Logs(dt,Thread,Level,Logger,Message)表示插入logs表中5个字段,请自己建表的时候要对应这句sql语句,或者也可以修改这句sql语句对应你的数据库表

log4net配置文件信息(包含了输出到控制台,输出到文件,输出到mysql,输出到sqlserver):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <appender name="SqlServerAdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection,System.Data" />
      <connectionString value="Server=KEBAO-PC;Database=BillDB;Trusted_Connection=True;" />
      <commandText value="insert into Logs(dt,Thread,Level,Logger,Message) values(@log_date,@thread, @log_level, @logger, @message)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>

    <appender name="MysqlAdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
      <connectionString value="database=AccountManager;server=localhost;Uid=root;Pwd=1234;" />
      <commandText value="insert into log(Date,Thread,Level,Logger,Message) values(@log_date,@thread, @log_level, @logger, @message)" />
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
        <!--<layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss}" />-->
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <file value= "./service.log"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--log备份文件数-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式为:2018-06-30.log-->
      <param name= "DatePattern" value= "yyyy-MM-dd".log""/>
      <!--日志根据日期滚动-->
      <param name= "RollingStyle" value= "Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
      </layout>
    </appender>

    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
      </layout>

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

    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="All" />
      <appender-ref ref="ColoredConsoleAppender"/>
    </root>
    <logger name="SqlServerLog">
      <level value="ALL" />
      <appender-ref ref="SqlServerAdoNetAppender"/>
    </logger>
    <logger name="MysqlLog">
      <level value="ALL" />
      <appender-ref ref="MysqlAdoNetAppender"/>
    </logger>
    <logger name="FileLog">
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender"/>
    </logger>
  </log4net>
</configuration>
代码如下:
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Log4Net
{
    class Program
    {
        private readonly static ILog _log = LogManager.GetLogger(typeof(Program));
        private readonly static ILog _sqlserverlog = LogManager.GetLogger("SqlServerLog");
        private readonly static ILog _mysqllog = LogManager.GetLogger("MysqlLog");
        private readonly static ILog _filelog = LogManager.GetLogger("FileLog");
        static void Main(string[] args)
        {
            var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config");
            XmlConfigurator.ConfigureAndWatch(logCfg);  //加载配置文件
            _log.Info("AllLog");
            _sqlserverlog.Info("SqlServerAdoNetAppender");
            _mysqllog.Info("MysqlAdoNetAppender");
            _filelog.Info("RollingLogFileAppender");
            Console.ReadLine();
        }
    }
}

注意:

1.输出到控制台的信息是因为ColoredConsoleAppender写在了配置文件的Root字段中了

2.如果是在asp.net MVC中写日志,则在Global.asax.cs文件的Application_Start函数中添加:

log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("Log4net.config")));
输出结果:
个人订阅号:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值