外贸网站开发营销,汕头新导网络公司,wordpress 怎么安全,网站设计制作策划书一、介绍此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知#xff0c;一旦自己的项目报错#xff0c;如果没有进行处理都是显示不友好的#xff0c;有得甚至直接爆出错误页面#xff0c;看的也是很奇怪。为了避免出现这样的错误以及在错误出现的时… 一、介绍 此篇文章将会介绍项目的全局异常收集以及采用log4net或者NLog记录。众所周知一旦自己的项目报错如果没有进行处理都是显示不友好的有得甚至直接爆出错误页面看的也是很奇怪。 为了避免出现这样的错误以及在错误出现的时候可以进行收集错误供维护人员进行bug修改因此需要进行全局异常的收集。 让我们开始部署吧。 此篇文章的目录1、log4net使用2、Nlog使用后期将会把NLogELK进行结合部署收集我们的asp.net core的项目。大家可以拭目以待吧。 二、部署log4net使用 1、新建一个asp.net core webapi的项目然后目前我先引入 log4net nuget包。2、然后创建一个log4net.config文件此文件中我创建了一个是记录 错误的文件夹LogError以及是记录操作的文件夹(LogInfo)代码如下我把需要记录的文件放在了log文件夹下面。?xml version1.0 encodingutf-8?configuration log4net !-- 错误日志类-- logger namelogerror level valueALL / appender-ref refErrorAppender / /logger !-- 错误日志附加介质-- appender nameErrorAppender typelog4net.Appender.RollingFileAppender !--日志文件路径-- param nameFile valueLog\\LogError\\ / !--是否是向文件中追加日志-- param nameAppendToFile valuetrue / !--log保留天数-- param nameMaxSizeRollBackups value1000 / !--最大文件大小-- param nameMaxFileSize value10240 / !--日志文件名是否是固定不变的-- param nameStaticLogFileName valuefalse / !--日志文件名格式为:2008-08-31.log-- param nameDatePattern valueyyyy-MM-ddquot;.htmquot; / !--日志根据日期滚动-- param nameRollingStyle valueDate / !--信息日志布局-- layout typelog4net.Layout.PatternLayout param nameConversionPattern valuelt;HR COLORredgt;%n【异常时间】%d [%t] lt;BRgt;%n【异常级别】%-5p lt;BRgt;%n%m lt;BRgt;%n lt;HR Size1gt; / /layout /appender !-- 信息日志类 -- logger nameloginfo level valueALL / appender-ref refInfoAppender / /logger !-- 信息日志附加介质-- appender nameInfoAppender typelog4net.Appender.RollingFileAppender !--日志文件路径-- param nameFile valueLog\\LogInfo\\ / !--是否是向文件中追加日志-- param nameAppendToFile valuetrue / !--log保留天数-- param nameMaxSizeRollBackups value100 / param nameMaxFileSize value1 / !--日志文件名是否是固定不变的-- param nameStaticLogFileName valuefalse / !--日志文件名格式为:2008-08-31.log-- param nameDatePattern valueyyyy-MM-ddquot;.htmquot; / !--日志根据日期滚动-- param nameRollingStyle valueDate / !--信息日志布局-- layout typelog4net.Layout.PatternLayout param nameConversionPattern valuelt;HR COLORbluegt;%n日志时间%d [%t] lt;BRgt;%n日志级别%-5p lt;BRgt;%n%m lt;BRgt;%n lt;HR Size1gt; / /layout /appender /log4net !-- To customize the asp.net core module uncomment and edit the following section. For more info see https://go.microsoft.com/fwlink/?linkid838655 -- !-- system.webServer handlers remove nameaspNetCore/ add nameaspNetCore path* verb* modulesAspNetCoreModule resourceTypeUnspecified/ /handlers aspNetCore processPath%LAUNCHER_PATH% arguments%LAUNCHER_ARGS% stdoutLogEnabledfalse stdoutLogFile.\logs\stdout / /system.webServer --/configuration3、在asp.net core项目中 Startup.cs 中需要添加初始化log4net的仓储名主要是用来给log4net标记一个名称这边可以随意。 4、在项目中创建一个类用来记录log的日志格式以及数据分类存放创建LogHelper.cs, 定义log格式当然自己可以随意定义哈。#region 全局异常错误记录持久化 /// summary /// 全局异常错误记录持久化 /// /summary /// param namethrowMsg/param /// param nameex/param public static void ErrorLog(string throwMsg, Exception ex) { string errorMsg string.Format(【抛出信息】{0} br【异常类型】{1} br【异常信息】{2} br【堆栈调用】{3}, new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg errorMsg.Replace(\r\n, br); errorMsg errorMsg.Replace(位置, strong style\color:red\位置/strong); logerror.Error(errorMsg); } #endregion#region 自定义操作记录 /// summary /// 自定义操作记录与仓储中的增删改的日志是记录同一张表 /// /summary /// param namethrowMsg/param /// param nameex/param public static void WriteLog(string throwMsg, Exception ex) { string errorMsg string.Format(【抛出信息】{0} br【异常类型】{1} br【异常信息】{2} br【堆栈调用】{3}, new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace }); errorMsg errorMsg.Replace(\r\n, br); errorMsg errorMsg.Replace(位置, strong style\color:red\位置/strong); logerror.Error(errorMsg); } #endregion5、有了以上的log格式这样我就开始定义一下全局异常处理吧我这边先创建一个全局异常处理类 GlobalExceptions.cs 然后需要在startup.cs中注入在ConfigureServices 方法中注入。//注入全局异常捕获services.AddMvc(o {
o.Filters.Add(typeof(GlobalExceptions));
}); 6、GlobalExceptions类中添加处理当然异常需要继承IExceptionFilter。代码如下GlobalExceptions public class GlobalExceptions : IExceptionFilter { private readonly IHostingEnvironment _env; public GlobalExceptions(IHostingEnvironment env) { _env env; } public void OnException(ExceptionContext context) { var json new JsonErrorResponse(); //这里面是自定义的操作记录日志 if (context.Exception.GetType() typeof(UserOperationException)) { json.Message context.Exception.Message; if (_env.IsDevelopment()) { json.DevelopmentMessage context.Exception.StackTrace;//堆栈信息 } context.Result new BadRequestObjectResult(json);//返回异常数据 } else { json.Message 发生了未知内部错误; if (_env.IsDevelopment()) { json.DevelopmentMessage context.Exception.StackTrace;//堆栈信息 } context.Result new InternalServerErrorObjectResult(json); } //采用log4net 进行错误日志记录 LogHelper.ErrorLog(json.Message, context.Exception); } } public class InternalServerErrorObjectResult : ObjectResult { public InternalServerErrorObjectResult(object value) : base(value) { StatusCode StatusCodes.Status500InternalServerError; } }JsonErrorResponse.cs public class JsonErrorResponse { /// summary /// 生产环境的消息 /// /summary public string Message { get; set; } /// summary /// 开发环境的消息 /// /summary public string DevelopmentMessage { get; set; } }/// summary /// 操作日志 /// /summary public class UserOperationException : Exception { public UserOperationException() { } public UserOperationException(string message) : base(message) { } public UserOperationException(string message, Exception innerException) : base(message, innerException) { } }自此全局异常配置完成然后我们可以测试一下随便写一个除以0的代码在日志记录中就会出现如下的展示哇发现我的错误日志的格式非常的清楚当然这个跟我的做事态度以及性格有很大的关系的啦毕竟楼主还是很帅的。哈哈哈。 三、NLog使用 1、在项目中添加nlog的nuget包引入“NLog.Web.AspNetCore”2、创建nlog.config文件大家会发现我的log格式跟上面的格式操作而且我的分层层次也很清楚。哈哈?xml version1.0 encodingutf-8 ?nlog xmlnshttp://www.nlog-project.org/schemas/NLog.xsd xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance autoReloadtrue !-- the targets to write to -- targets !-- 输出到文件,这个文件记录所有的日志 -- target xsi:typeFile nameallfile fileNameLog\LogAll\${shortdate}.htm layoutlt;HR COLORredgt;${longdate}lt;BRgt;${logger}lt;BRgt;${uppercase:${level}}lt;BRgt;${message} ${exception}lt;HR Size1gt; / !-- 输出到文件,这个文件记录错误日志 -- target xsi:typeFile namelogError fileNameLog\LogError\${shortdate}.htm layoutlt;HR COLORredgt;【异常时间】${date} lt;BRgt;【异常级别】${level:uppercasetrue} lt;BRgt;${message}lt;HR Size1gt; / !-- 输出到文件,这个文件记录操作日志 -- target xsi:typeFile namelogInfo fileNameLog\LogInfo\${shortdate}.htm layoutlt;HR COLORredgt;【操作时间】${date} lt;BRgt;【操作级别】${level:uppercasetrue} lt;BRgt;${message}lt;HR Size1gt; / /targets !-- rules to map from logger name to target -- rules !--All logs, including from Microsoft-- logger name* minlevelTrace writeToallfile / logger name* minlevelError writeTologError / logger name* minlevelInfo writeTologInfo / logger nameMicrosoft.* maxLevelInfo finaltrue / /rules/nlog3、在startup.cs中的 Configure方法注入//ILoggerFactory loggerFactoryloggerFactory.AddNLog();
NLog.LogManager.LoadConfiguration(nlog.config); //填入上面创建的文件的名称 4、创建NLogHelp.cs类public class NLogHelp { public static Logger logger LogManager.GetCurrentClassLogger(); public static void ErrorLog(string throwMsg, Exception ex) { string errorMsg string.Format(【异常信息】{0} br【异常类型】{1} br【堆栈调用】{2}, new object[] { throwMsg, ex.GetType().Name, ex.StackTrace }); errorMsg errorMsg.Replace(\r\n, br); errorMsg errorMsg.Replace(位置, strong style\color:red\位置/strong); logger.Error(errorMsg); } public static void InfoLog(string operateMsg) { string errorMsg string.Format(【操作信息】{0} br, new object[] { operateMsg }); errorMsg errorMsg.Replace(\r\n, br); logger.Info(errorMsg); } }5、在上面log4net中的GlobalExceptions类把LogHelper.ErrorLog(json.Message, context.Exception)替换成如下NLogHelp.ErrorLog(json.Message,context.Exception)即可。运行测试如下【异常时间】2018/09/03 14:41:36.786 【异常级别】ERROR 【异常信息】错误消息Failed to create instance of typeat AspectCore.Injector.ServiceCallSiteResolver.ResolvePropertyInject(ServiceDefinition service)【异常类型】InvalidOperationException 【堆栈调用】 at AspectCore.Injector.ServiceCallSiteResolver.ResolveTypeService(TypeServiceDefinition typeServiceDefinition)at AspectCore.Injector.ServiceCallSiteResolver.ResolvePropertyInject(ServiceDefinition service)at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)at AspectCore.Injector.ServiceResolver.b自此完美搞定等后期我将会介绍采用ELKNLog进行数据采集及展示请大家拭目以待吧。原文链接https://www.cnblogs.com/guolianyu/p/9580626.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com