• ASP.NET Web API 记录请求响应数据到日志的一个方法


    log4net配置:

    添加LoggerHelper.cs

       public class LoggerHelper
        {
            static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
            static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
            static readonly log4net.ILog logmonitor = log4net.LogManager.GetLogger("logmonitor");
    
            /// <summary>
            /// 记录异常日志
            /// </summary>
            /// <param name="ErrorMsg"></param>
            /// <param name="ex"></param>
            public static void Error(string ErrorMsg, Exception ex = null)
            {
                if (ex != null)
                {
                    logerror.Error(ErrorMsg, ex);
                }
                else
                {
                    logerror.Error(ErrorMsg);
                }
            }
    
            /// <summary>
            /// 记录消息日志
            /// </summary>
            /// <param name="Msg"></param>
            public static void Info(string Msg)
            {
                loginfo.Info(Msg);
            }
    
            /// <summary>
            /// 记录监控日志
            /// </summary>
            /// <param name="Msg"></param>
            public static void Monitor(string Msg)
            {
                logmonitor.Info(Msg);
            }
        }

    添加log4net配置文件log4net.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
      <log4net>
        <!--错误日志-->
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="log\LogError\"/>
          <appendToFile value="true"/>
          <rollingStyle value="Date"/>
          <datePattern value="yyyy\yyyyMM\yyyyMMdd'.txt'"/>
          <staticLogFileName value="false"/>
          <param name="MaxSizeRollBackups" value="100"/>
          <layout type="log4net.Layout.PatternLayout">
            <!--每条日志末尾的文字说明-->
            <!--输出格式-->
            <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
            <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n错误描述:%message%newline %n"/>
          </layout>
        </appender>
        <!--Info日志-->
        <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="yyyy\yyyyMM\yyyyMMdd'.txt'" />
          <param name="RollingStyle" value="Date" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n日志描述:%message%newline %n"/>
          </layout>
        </appender>
    
        <!--监控日志-->
        <appender name="MonitorAppender" type="log4net.Appender.RollingFileAppender">
          <param name="File" value="Log\LogMonitor\" />
          <param name="AppendToFile" value="true" />
          <param name="MaxFileSize" value="10240" />
          <param name="MaxSizeRollBackups" value="100" />
          <param name="StaticLogFileName" value="false" />
          <param name="DatePattern" value="yyyy\yyyyMM\yyyyMMdd'.txt'" />
          <param name="RollingStyle" value="Date" />
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n跟踪描述:%message%newline %n"/>
          </layout>
        </appender>
        <!--Error日志-->
        <logger name="logerror">
          <level value="ERROR" />
          <appender-ref ref="RollingLogFileAppender" />
        </logger>
        <!--Info日志-->
        <logger name="loginfo">
          <level value="INFO" />
          <appender-ref ref="InfoAppender" />
        </logger>
        <!--监控日志-->
        <logger name="logmonitor">
          <level value="Monitor" />
          <appender-ref ref="MonitorAppender" />
        </logger>
      </log4net>
      <!--<system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>-->
    
    </configuration>

    将配置文件log4net.config应用到程序集:

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

    直接调用LoggerHelper.Info(msg);就可以了

    生成的目录结构:

    WebAPI 日志记录:

    添加一个类继承自DelegatingHandler

     public class CustomMessageHandler : DelegatingHandler
        {
            protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                //return base.SendAsync(request, cancellationToken);
                //记录请求内容
                if (request.Content != null)
                {
                    string msg = string.Format("请求Content:{0}", request.Content.ReadAsStringAsync().Result);
                    LoggerHelper.Info(msg);
                }
                //发送HTTP请求到内部处理程序,在异步处理完成后记录相应内容
                return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((task) =>
                {
                    // 记录响应内容
                    string msg = string.Format("响应Content:{0}", task.Result.Content.ReadAsStringAsync().Result);
                    LoggerHelper.Info(msg);
                    return task.Result;
                });
            }
        }

     然后修改全局,Global.asax.cs,添加监控类

     参考地址:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/

    慎于行,敏于思!GGGGGG
  • 相关阅读:
    P6406 [COCI2014-2015] Norma 分治+数学
    CF547D Mike and Fish 欧拉回路
    P6628 [省选联考 2020 B 卷] 丁香之路 欧拉路+最小生成树
    2020 CSP-S2 游记
    CF594D REQ 树状数组+质因数分解
    CF416E President's Path floyd
    CF1385F Removing Leaves 拓扑排序
    CF449C Jzzhu and Apples 思维题
    回溯法与八皇后问题
    codewars-7kyu:Sum of the first nth term of Series
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/7852173.html
Copyright © 2020-2023  润新知