C# Log4net用法

2882 人阅读
分类:

介绍

log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。

本文主要是介绍如何在Visual Studio2013中使用log4net快速创建系统日志。

下载log4net    log4net.dll

创建Asp.net Mvc项目

添加 log4net.config文件(用以配置log4net) 将下载好的log4net.dll添加引用到项目内

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\Info\" />
      <encoding value="utf-8" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="10MB" />
      <param name="RollingStyle" value="Composite" />
      <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/>
      <param name="StaticLogFileName" value="false" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" />
      </layout>
    </appender>
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\Error\" />
      <encoding value="utf-8" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="10MB" />
      <param name="RollingStyle" value="Composite" />
      <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/>
      <param name="StaticLogFileName" value="false" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" />
      </layout>
    </appender>
      
    <logger name="loginfo">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
    
    <logger name="logerror">
      <level value="ERROR" />
      <appender-ref ref="ErrorAppender" />
    </logger>
  </log4net>
</configuration>

添加LogHelper.cs类文件(和log4net.config放在同一个文件夹内容)

public static class LogHelper
{
    const string LOG4NET_CONFIG_FILE_NAME = "log4net.config";

    private static ILog log_info;
    /// <summary>
    /// 调试信息日志
    /// </summary>
    private static ILog LOG_INFO
    {
        get
        {
            if (log_info == null)
            {
                Init();
            }
            return log_info;
        }
    }

    private static ILog log_error;
    /// <summary>
    /// 异常信息日志
    /// </summary>
    private static ILog LOG_ERROR
    {
        get
        {
            if (log_error == null)
            {
                Init();
            }
            return log_error;
        }
    }

    /// <summary>
    /// 
    /// </summary>
    private static void Init()
    {
        string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LOG4NET_CONFIG_FILE_NAME);
        if (!File.Exists(fileName))
            WriteLog4NetConfig(fileName);

        FileInfo fi = new FileInfo(fileName);

        log4net.Config.XmlConfigurator.Configure(fi);

        log_error = LogManager.GetLogger("logerror");
        log_info = LogManager.GetLogger("loginfo");
    }

    /// <summary>
    /// 写出log4net配置信息文件
    /// </summary>
    /// <param name="fileName">输出文件名称</param>
    private static void WriteLog4NetConfig(string fileName)
    {
        FileStream fs = null;
        Stream xmlStream = null;
        byte[] bytsXml;
        int lenByts;

        try
        {
            Assembly asmCurrent = Assembly.GetExecutingAssembly();
            xmlStream = asmCurrent.GetManifestResourceStream(typeof(LogHelper).Namespace
                + "." + LOG4NET_CONFIG_FILE_NAME);
            bytsXml = new byte[xmlStream.Length];
            using (fs = File.Create(fileName))
            {
                while ((lenByts = xmlStream.Read(bytsXml, 0, bytsXml.Length)) > 0)
                {
                    //向文件中写信息
                    fs.Write(bytsXml, 0, lenByts);
                    fs.Flush();
                }
            }
        }
        finally
        {
            if (fs != null)
                fs.Close();

            if (xmlStream != null)
                xmlStream.Close();
        }
    }

    public static void Error(string message)
    {
        LOG_ERROR.Error(message);
    }

    public static void Error(string message, Exception ex)
    {
        LOG_ERROR.Error(message, ex);
    }

    public static void Info(string message)
    {
        LOG_INFO.Info(message);
    }
    public static void Info(string message, Exception ex)
    {
        LOG_INFO.Info(message, ex);
    }
}

在控制器里写入Log测试

LogHelper.Error("系统出错了");
LogHelper.Info("记录一些事情");

这时候就有日志文件生成了

注意: 如果文件log4net.config和启动项目不再一个启动程序中,该文件需要设置属性 生成操作 - "嵌入的资源"

如果想要邮件提醒功能,log4net也是可以配置的,这时候只需要修改log4net.config文件即可,添加如下配置

<!--邮箱设置-->
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <!-- SMTP 验证方式 -->
      <authentication value="Basic" />
      <to value="接收方地址@gmail.com" />
      <from value="发送方地址@163.com" />
      <username value="发送方地址@163.com" />
      <password value="发送方地址密码" />
      <subject value="站点访问异常" />
      <!--邮件服务端-->
      <smtpHost value="smtp.163.com"/>
      <bufferSize value="512" />
      <lossy value="true" />
      <!--这里我设置的是Error ,会接收(FATAL和ERROR日志)你可以根据自己的需要设置 
Log4net支持多种级别的日志。优先级从高到低依次排列如下:
            FATAL > ERROR > WARN > INFO > DEBUG
-->
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="Error"/>
      </evaluator>
      <!--输出格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d [%t] %n %-5level %logger [%property{NDC}] %n %message%n" />
      </layout>
    </appender>

添加到上面log4net.config <appender-ref ref="ErrorAppender" /> 下面

<appender-ref ref="SmtpAppender" />

这时候只要系统调用了写错误日志,系统也会同时发送一封邮件

源码下载地址: log4net写日志源码

和博主交个朋友吧
    发布篇幅
    • 文章总数:0
    • 原创:0
    • 转载:0
    • 译文:0
    文章分类
      文章存档
      阅读排行