Log4net发送日志邮件(实例下载)以及Log4Net配置详解

项目中要使用Log4net组件发送日志文件,大概需要以下几步:

首先,建立Log4net配置文件


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="all" />
      <appender-ref ref="ColoredConsoleAppender"/>
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="SmtpAppender"/>
    </root>
    <!--文件显示日志-->
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路径-->
      <param name= "File" value= "log/log-file.txt"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--log保留天数-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不变的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式为:2008-08-31.log-->
      <param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/>
      <!--日志根据日期滚动-->
      <param name= "RollingStyle" value= "Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--
              %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息

              %n(new line):换行
      
              %d(datetime):输出当前语句运行的时刻
      
              %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
      
              %t(thread id):当前语句所在的线程ID
      
              %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
      
              %c(class):当前日志对象的名称,例如:
      
                     模式字符串为:%-10c -%m%n
      
                     代码为:
      
              ILog log=LogManager.GetLogger(“Exam.Log”);
      
              log.Debug(“Hello”);
      
                  则输出为下面的形式:
      
              Exam.Log       - Hello
      
              %L:输出语句所在的行号
      
              %F:输出语句所在的文件名
      
              %-数字:表示该项的最小长度,如果不够,则用空格填充
      -->
        <param name="ConversionPattern" value="%n%d [%t] %-5p %c - %m%n %loggername" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="FATAL" />
      </filter>
    </appender>
    <!-- 控制台前台显示日志 -->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="WARN" />
        <foreColor value="Yellow, HighIntensity" />
      </mapping>
      <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>
    <!--发送邮件通知异常信息-->
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <authentication value="Basic" />
      <!--接收方邮箱地址,多个接收方以","隔开-->
      <to value="523673444@qq.com" />
      <!--测试126邮箱可以发邮件,QQ邮箱不能发-->
      <!--发送方邮箱地址-->
      <from value="您的126邮箱账号" />
      <!--发送发邮箱地址-->
      <username value="您的126邮箱账号" />
      <!--发送方邮箱登录密码-->
      <password value="您的126邮箱密码" />
      <!--邮件主题-->
      <subject value="homework2应用程序错误" />
      <!--邮件服务器-->
      <smtpHost value="smtp.126.com" />
      <port value ="25"/>
      <!--设置所使用的循环缓冲区的大小,默认为512个事件,若将此值设置为小于等于1,将没有缓冲,记录事件会同步交付-->
      <bufferSize value="1" />
      <!--超长部分是否丢弃-->
      <lossy value="true" />
      <!-- 下面的定义, 就是 日志级别 大于 WARN 的, 才发邮件.  -->
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="FATAL"/>
      </evaluator>
      <!-- 下面是 定义邮件的格式 (好多换行啊) -->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%n%d [%t] %-5p %c - %m%n %loggername" />
      </layout>
    </appender>
  </log4net>
</configuration>

其次,建立LogHelper类统一提供logger实例


public class LogHelper : Singleton<LogHelper>
    {
        public LogHelper()
        {
            var logCfg = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "configfiles/log4net.config");
            XmlConfigurator.ConfigureAndWatch(logCfg);
        }

        public ILog Logger
        {
            get { return LogManager.GetLogger("homework2.logger"); }
        }

        /// <summary>
        /// 异步的方式记录日志
        /// </summary>
        /// <param name="errMsg"></param>
        public void AsyncLogger(string errMsg)
        {
            Task.Factory.StartNew(() => Logger.Fatal(errMsg));
        }
    }


接下来,就可以在程序中使用提供的LogHelper类来记录日志了,如下

  1. 调用异步方法记录日志

EventModelList.Find(e => typeof(T).Name.Equals(e.Name)).EventList.ToList().ForEach(
                    str =>
                    {
                        t.FireEventHander += () =>
                            LogHelper.Instance.AsyncLogger(str);
                    });



2.调用logger对象记录日志

class Program
    {
        static void Main(string[] args)
        {
            try
            {
               //TODO:一些代码
            }
            catch (Exception ex)
            {
                LogHelper.Instance.Logger.Error(ex.Message);
                LogHelper.Instance.Logger.Error(ex.StackTrace);
            }

            Console.ReadKey();
        }
    }

附上效果图一张


实例下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值