当前位置:首页 > Windows程序 > 正文

WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

2021-03-24 Windows程序

好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日志咱还是得记录则个。总不能上线后报bug了让自己手足无措吧,虽然不管有木有错误日志报bug都是件很头疼的事...

我们知道webAPI也有好几个Filter,上篇文章我们做token与权限用到了ActionFilterAttribute,这次我们用ExceptionFilterAttribute来做异常日志的记录。首先我们的代码里面会主动的捕获一些异常手动抛出,例如对用户输入数据的验证,权限的验证,业务的验证等。也会有一些我们无法预料的异常,可能是代码的漏洞或者逻辑的漏洞...那么我们肯定是想能够在一个切面全部拦截这些异常,记录到错误日志中,以便作分析使用...

博主使用的log4net做日志的写库操作,这里就不介绍log4net的基本用法了,直接上代码:

1 <log4net> 2 <!--<appender type="log4net.Appender.RollingFileAppender"> 3 <file value="C:\testlog.txt" /> 4 <appendToFile value="true" /> 5 <maxSizeRollBackups value="10" /> 6 <maximumFileSize value="100" /> 7 <rollingStyle value="Date" /> 8 <datePattern value="yyyy-MM-dd" /> 9 <staticLogFileName value="true" /> 10 <layout type="log4net.Layout.PatternLayout"> 11 <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline " /> 12 </layout> 13 </appender>-->
14 <appender type="log4net.Appender.AdoNetAppender"> 15 <connectionType value="System.Data.SqlClient.SqlConnection,System.Data, Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" /> 21 <connectionString value="Data Source=.;database=RCBLog;Integrated Security=True; MultipleActiveResultSets=True;" /> 22 <commandText value="INSERT INTO ErrorLog (LOGID,LOG_DATE,LOG_MESSAGE,LOG_EXCEPTION,LOG_LEVEL,LOGGER,LOG_SOURCE,OPERATORID,OPERATORACCOUNTNAME) VALUES (@LogId,@log_date,@LogMessage,@LogException,@log_level, @logger, @source,@LogOperator,@OperatorAccountName)" /> 23 <bufferSize value="100" /> 24 <parameter> 25 <parameterName value="@log_date" /> 26 <dbType value="DateTime" /> 27 <layout type="log4net.Layout.RawTimeStampLayout" /> 28 </parameter> 29 <parameter> 30 <parameterName value="@log_level" /> 31 <dbType value="String" /> 32 <size value="100" /> 33 <layout type="log4net.Layout.PatternLayout"> 34 <conversionPattern value="%level" /> 35 </layout> 36 </parameter> 37 <parameter> 38 <parameterName value="@logger" /> 39 <dbType value="String" /> 40 <size value="255" /> 41 <layout type="log4net.Layout.PatternLayout"> 42 <conversionPattern value="%logger" /> 43 </layout> 44 </parameter> 45 <parameter> 46 <parameterName value="@source" /> 47 <dbType value="String" /> 48 <size value="2000" /> 49 <layout type="log4net.Layout.PatternLayout"> 50 <conversionPattern value="%file:%line" /> 51 </layout> 52 </parameter> 53 <!--自定义属性--> 54 <parameter> 55 <parameterName value="@LogId" /> 56 <dbType value="String" /> 57 <size value="255" /> 58 <layout type="MP.Infrastructure.SystemLog.CustomLayout,MP.Infrastructure"> 59 <conversionPattern value="%LogId" /> 60 </layout> 61 </parameter> 62 <parameter> 63 <parameterName value="@LogException" /> 64 <dbType value="String" /> 65 <size value="4000" /> 66 <layout type="MP.Infrastructure.SystemLog.CustomLayout,MP.Infrastructure"> 67 <conversionPattern value="%LogException" /> 68 </layout> 69 </parameter> 70 <parameter> 71 <parameterName value="@LogMessage" /> 72 <dbType value="String" /> 73 <size value="4000" /> 74 <layout type="MP.Infrastructure.SystemLog.CustomLayout,MP.Infrastructure"> 75 <conversionPattern value="%LogMessage" /> 76 </layout> 77 </parameter> 78 <parameter> 79 <parameterName value="@LogOperator" /> 80 <dbType value="String" /> 81 <size value="255" /> 82 <layout type="MP.Infrastructure.SystemLog.CustomLayout,MP.Infrastructure"> 83 <conversionPattern value="%OperatorId" /> 84 </layout> 85 </parameter> 86 <parameter> 87 <parameterName value="@OperatorAccountName" /> 88 <dbType value="String" /> 89 <size value="255" /> 90 <layout type="MP.Infrastructure.SystemLog.CustomLayout,MP.Infrastructure"> 91 <conversionPattern value="%OperatorAccountName" /> 92 </layout> 93 </parameter> 94 </appender> 95 <logger> 96 <level value="ERROR" /> 97 <!--<appender-ref ref="RollingFileAppender" />--> 98 <appender-ref ref="AdoNetAppender_Sqlserver" /> 99 </logger> 100 </log4net>

注:

1.<log4net>节点需要在<configuration>节点下

2.注释掉的2-13行与97行是写文件

3.第23行的数值表示缓存值,调试阶段可以设置成0,才能及时的在数据库看到错误日志

4.博主使用到了自定义属性,就顺便说说自定义属性的用法,先看看博主的错误日志类:

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66694.html