0
点赞
收藏
分享

微信扫一扫

【WebAPI】Web API记录请求与响应到日志,使用log4net

343d85639154 2022-04-13 阅读 16

问题

在编写API功能时,记录调用日志是必不可少的功能,日志在后续分析问题起到一个非常重要的作用。

这里使用log4net作为日志记录。

步骤

  • 使用NuGet为项目添加log4net

  • 添加log4net.config文件 
<?xml version="1.0" encoding="utf-8"?>
<configuration>

	<configSections>
		<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
	</configSections>
	<log4net>
		<!--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="yyyyMMdd'.txt'" />
			<param name="RollingStyle" value="Date" />
			<layout type="log4net.Layout.PatternLayout">
				<conversionPattern value="Date:%date %nMessage:%n%message%newline %n"/>
			</layout>
		</appender>

		<!--Info日志-->
		<logger name="loginfo">
			<level value="INFO" />
			<appender-ref ref="InfoAppender" />
		</logger>

	</log4net>

</configuration>
  • 在项目的AssemblyInfo.cs文字添加log4net配置
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]

  • 添加LoggerHelper
public class LoggerHelper
{
    static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");

    /// <summary>
    /// 记录消息日志
    /// </summary>
    /// <param name="Msg"></param>
    public static void Info(string Msg)
    {
        loginfo.Info(Msg);
    }
}
  • 添加CustomMessageHandler
public class CustomMessageHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        //return base.SendAsync(request, cancellationToken);
        //记录请求内容
        if (request.Content != null)
        {
            string msg = $"Request | Request Method: {request.Method},Request Uri: {request.RequestUri.AbsoluteUri}, Request Content: { request.Content.ReadAsStringAsync().Result}";
            LoggerHelper.Info(msg);
        }
        //发送HTTP请求到内部处理程序,在异步处理完成后记录相应内容
        return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((task) =>
        {
            string result = task.Result.Content == null ? "Bad Request" : task.Result.Content.ReadAsStringAsync().Result;
            string msg = $"Response | Request Method:{request.Method},Request Uri: {request.RequestUri.AbsoluteUri}, Response Content: {result}";

            // 记录响应内容
            LoggerHelper.Info(msg);
            return task.Result;
        });
    }
}
  • 在Global.asax文件添加日志配置
GlobalConfiguration.Configuration.MessageHandlers.Add(new CustomMessageHandler());

效果

目录

日志

 

参考

ASP.NET Web API 记录请求响应数据到日志的一个方法 - Garson_Zhang - 博客园

举报

相关推荐

0 条评论