1、安装log4net插件
在nuget包管理器查找log4net并安装,安装最新版本就行,如果不行,自行百度吧。在需要使用log4net的项目中引用它
2、创建log4net.config
在和web.config同一文件路径下创建log4net.config文件,随便创建一个文件,重命名即可。创建完成之后,设置其属性:复制到输出目录。并在其中加入以下设置
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <!--日志--> <log4net> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <!-- 错误日志配置 --> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <!-- 保存文件的路径和文件名称 --> <param name="File" value="Logs\Error\error.txt" /> <param name="AppendToFile" value="true" /> <!-- 日期格式 --> <param name="DatePattern" value="yyyyMMdd"/> <!-- 保存文件数量 --> <param name="MaxSizeRollBackups" value="100" /> <!-- 每个文件的大小 --> <param name="MaximumFileSize" value="1MB" /> <param name="RollingStyle" value="Size" /> <param name="StaticLogFileName" value="true" /> <!-- 日志输出格式 --> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> <!-- 正常日志配置 --> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Logs\Info\info.txt" /> <param name="DatePattern" value="yyyyMMdd"/> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="100" /> <param name="MaximumFileSize" value="1MB" /> <param name="RollingStyle" value="Size" /> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> </log4net> </configuration>
上述配置中有对应的注释,可以根据个人需要更改。这里我们需要多说一嘴log4net的日志等级,从低至高分别是ALL、DEBUG、INFO、WARN、ERROR、FATAL、None。我们的配置中就配置了info(一般日志信息,可记录具体操作)和error(错误日志信息,可记录异常信息)。
3、记录程序集信息
找出项目AssemblyInfo.cs文件,在文件的末尾加上
// 指定log4net 的配置文件 [assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]
4、建立log4net帮助类
/// <summary> /// 日志帮助类 /// </summary> public class LogHelper { public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); /// <summary> /// 普通的文件记录日志 /// </summary> /// <param name="info"></param> public static void WriteLog(string info) { if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } /// <summary> /// 错误日志 /// </summary> /// <param name="info"></param> /// <param name="se"></param> public static void WriteLog(string info, Exception se) { if (logerror.IsErrorEnabled) { logerror.Error(info, se); } } }
5、全局拦截异常信息并写进错误日志
找到项目的WebApiConfig.cs文件,添加ExceptionFilterAttribute过滤器截取全局异常
namespace SnailFis { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 //跨域配置 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); // Web API 路由 config.MapHttpAttributeRoutes(); //设置webapi路由规则 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "snailFis_api/{controller}/{action}" ); config.Filters.Add(new ApiExceptionResultAttribute());//添加过滤器 //移除xml返回格式数据 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); } /// <summary> /// API异常返回 /// </summary> public class ApiExceptionResultAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext actionExecutedContext) { base.OnException(actionExecutedContext);//获取返回的http信息 LogHelper.WriteLog("WebApiConfig", actionExecutedContext.Exception); } } } }
这时我们可以故意在代码中抛出一个异常,看看能不能截取到并写入进错误日志了。另外info日志,就需要根据个人需求添加了,这里就不再赘述了。