zoukankan      html  css  js  c++  java
  • C#WebAPI中中log4net的配置步骤

    1:Nuget程序包引用

     

    2:项目右键》添加》新建项》Web》WEb配置文件>命名为log4net

    3:添加log4net.config配置信息

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <system.web>
        <compilation debug="true" targetFramework="4.5.2" />
        <httpRuntime targetFramework="4.5.2" />
      </system.web>
      <!-- Level的级别,由高到低 -->
      <!-- None > Fatal > ERROR > WARN > DEBUG > INFO > ALL-->
      <!-- 解释:如果level是ERROR,则在cs文件里面调用log4net的info()方法,则不会写入到日志文件中-->
      <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">
          <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->
          <param name="File" value="Log\LogError\" />
          <!--日志输出到exe程序这个相对目录下-->
          <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" />
          <!--文件创建的方式,这里是以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\LogInfo\" />
          <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>
    View Code

     4:项目中的AssemblyInfo.cs文件的最后一行中添加

    [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

    5:添加LogHelper类

    public class LogHelper
        {
            public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");//这里的 loginfo 和 log4net.config 里的名字要一样
            public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");//这里的 logerror 和 log4net.config 里的名字要一样
            public static void WriteLog(string info)
            {
                if (loginfo.IsInfoEnabled)
                {
                    loginfo.Info(info);
                }
            }
    
            public static void WriteLog(string info, Exception ex)
            {
                if (logerror.IsErrorEnabled)
                {
                    logerror.Error(info, ex);
                }
            }
        }
    View Code

    6:项目中使用

    try
                {
                  
                   
                }
                catch (Exception ex)
                {
                    LogHelper.WriteLog(System.Reflection.MethodBase.GetCurrentMethod().Name+":"+ ex.Message.ToString(), ex);
                    throw;
                }
    View Code

    上面第6步也可以写一个全局异常处理

    (1)添加异常过滤

     对应代码

    public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
        {
            //重写基类的异常处理方法
            #region
            public override void OnException(HttpActionExecutedContext actionExecutedContext)
            {
               
                //2.返回调用方具体的异常信息
                if (actionExecutedContext.Exception is NotImplementedException)
                {
                    var oResponse = new HttpResponseMessage(HttpStatusCode.NotImplemented);
                    //oResponse.Content = new StringContent("方法不被支持");
                    oResponse.Content = new StringContent(actionExecutedContext.Exception.Message);
                    oResponse.ReasonPhrase = "This Func is Not Supported";
                    actionExecutedContext.Response = oResponse;
                }
                else if (actionExecutedContext.Exception is TimeoutException)
                {
                    actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.RequestTimeout);
                }
                //.....这里可以根据项目需要返回到客户端特定的状态码。如果找不到相应的异常,统一返回服务端错误500
                else
                {
                    actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                    //注释掉错误信息的展示,显示统一的错误
                    var msg  = actionExecutedContext.Exception.Message+ "HttpStatusCode:" + Convert.ToInt32(HttpStatusCode.InternalServerError);
                    LogHelper.WriteLog(msg);
                    var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        //Content = new StringContent(actionExecutedContext.Exception.Message),
                        Content = new StringContent(msg),
                        ReasonPhrase = "Error"
                    };
                    actionExecutedContext.Response = oResponse;
                }
    
                base.OnException(actionExecutedContext);
            }
            #endregion
        }
    View Code

    (2)项目Global.asax 添加如下

      GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute());

    (3)对应Controller添加

  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/wu-peng/p/12867349.html
Copyright © 2011-2022 走看看