美文网首页
关于log4net的使用和无log输出的解决方法

关于log4net的使用和无log输出的解决方法

作者: 我是Mr小赵先生 | 来源:发表于2019-02-27 11:38 被阅读0次

    1.新建一个log4net类库
    2.在log4net官网或者Nuget获取log4net并引入新建的类库
    3.编写log4net的帮助类

    using System;
    
    //此处是配置log4net配置文件所在位置,很关键,多数是因为此处没有配置对导致无log输出的
    //ConfigFile 表示log4net配置文件所在的位置。
    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", ConfigFileExtension = "config", Watch = true)]
    namespace Common
    {
        /// <summary>
        /// 日志帮助类
        /// </summary>
        public class LogHelper
        {
              //GetLogger表示log4net配置文件中logger标签中name属性,此处要一致 不然无log输出
            private static readonly log4net.ILog logInfo = log4net.LogManager.GetLogger("loginfo");
            private static readonly log4net.ILog logError = log4net.LogManager.GetLogger("logerror");
    
            /// <summary>
            /// 记录Info日志
            /// </summary>
            /// <param name="msg"></param>
            /// <param name="ex"></param>
            public static void Info(string msg)
            {
                if (logInfo.IsInfoEnabled)
                {
                    logInfo.Info(msg);
                }
            }
            /// <summary>
            /// 记录Error日志
            /// </summary>
            /// <param name="errorMsg"></param>
            /// <param name="ex"></param>
            public static void Error(string info, Exception ex = null)
            {
                if (!string.IsNullOrEmpty(info) && ex == null)
                {
                    logError.ErrorFormat("【附加信息】 : {0}<br>", new object[] { info });
                }
                else if (!string.IsNullOrEmpty(info) && ex != null)
                {
                    string errorMsg = BeautyErrorMsg(ex);
                    logError.ErrorFormat("【附加信息】 : {0}<br>{1}", new object[] { info, errorMsg });
                }
                else if (string.IsNullOrEmpty(info) && ex != null)
                {
                    string errorMsg = BeautyErrorMsg(ex);
                    logError.Error(errorMsg);
                }
            }
    
            /// <summary>
            /// 美化错误信息
            /// </summary>
            /// <param name="ex">异常</param>
            /// <returns>错误信息</returns>
            private static string BeautyErrorMsg(Exception ex)
            {
                string errorMsg = string.Format("【异常类型】:{0} <br>【异常信息】:{1} <br>【堆栈调用】:{2}", new object[] { ex.GetType().Name, ex.Message, ex.StackTrace });
                errorMsg = errorMsg.Replace("\r\n", "<br>");
                errorMsg = errorMsg.Replace("位置", "<strong style=\"color:red\">位置</strong>");
                return errorMsg;
            }
        }
    }
    
    

    4.写log4net配置文件,并放在调用log4net帮助文件的项目处,如Web网站则放在web.config的同级目录,如windows窗体程序在最终要放在bin目录下或者exe同目录下

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
      </configSections>
      <log4net>
        <!-- 错误日志类-->
        <logger name="logerror">
          <level value="ALL" />
          <appender-ref ref="ErrorAppender" />
        </logger>
        <!-- 信息日志类 -->
        <logger name="loginfo">
          <level value="ALL" />
          <appender-ref ref="InfoAppender" />
        </logger>
        <!-- 错误日志附加介质-->
        <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log\\Error\\" />
          <param name="AppendToFile" value="true" />
          <param name="MaxSizeRollBackups" value="100" />
          <param name="MaxFileSize" value="10240" />
          <param name="StaticLogFileName" value="false" />
          <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
          <param name="RollingStyle" value="Date" />
          <!--布局-->
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n【异常时间】:%d [%t] &lt;BR&gt;%n【异常级别】:%-5p &lt;BR&gt;%n【异 常 类】:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
          </layout>
        </appender>
        <!-- 信息日志附加介质-->
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log\\Info\\" />
          <param name="AppendToFile" value="true" />
          <param name="MaxFileSize" value="10240" />
          <param name="MaxSizeRollBackups" value="100" />
          <param name="StaticLogFileName" value="false" />
          <param name="DatePattern" value="yyyyMMdd&quot;.htm&quot;" />
          <param name="RollingStyle" value="Date" />
          <!-- 信息日志布局-->
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n日志时间:%d [%t] &lt;BR&gt;%n日志级别:%-5p &lt;BR&gt;%n日 志 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
          </layout>
        </appender>
      </log4net>
    
    </configuration>
    
    

    5.以上log4net代码可以拿过来无bug运行

    无log输出的解决方案

    1.在log帮助类输出log的代码前调用log4net.LogManager.GetRepository().Configured查看log4net的配置文件是否已经配置,如果为false,那么没有log的原因就是log4net配置文件没有配置对了,一般无log都是这个原因造成的,具体怎么配有这里提供1个个人比较
    常用的方案
    在log4net 帮助类中加入[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", ConfigFileExtension = "config", Watch = true)],放在引用log4net类库的AssemblyInfo中也可以。ConfigFile指向log4net.xml配置文件的位置,如Web网站、webapi等则放在web.config的同级目录,如Windows窗体程序最终要放在bin目录下或者exe同目录下。同时确保在不管Web还是Win程序下有log4net.dll类库输出。

    2.如果log4net配置文件加载没问题,依然没有log输出,那要检测下log4net配置文件中

    logger标签 logger标签的name值和log4net.ILog logInfo = log4net.LogManager.GetLogger("loginfo");中GetLogger的值是否一致。
    无标题.png

    3.如果依然没log那么就要看看你调试程序的时候有没有报log4net的版本号是否兼容当下的.net版本号。个人亲测:log4net 2.0.8和.net framework4.6.1是兼容的

    相关文章

      网友评论

          本文标题:关于log4net的使用和无log输出的解决方法

          本文链接:https://www.haomeiwen.com/subject/wayxuqtx.html