当前位置: 首页 > news >正文

荆门网站制作某个产品营销推广方案

荆门网站制作,某个产品营销推广方案,css特效代码大全,网站自制app目录 一、引入 NuGet 包 二、配置log4net.config 三、编写Log4net封装类 四、编写日志记录类 五、AOP -- 拦截器 -- 封装 六、案例编写 七、结果展示 一、引入 NuGet 包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore MySql.Data ---- MySQL…

目录

一、引入 NuGet 包

二、配置log4net.config  

三、编写Log4net封装类

四、编写日志记录类

五、AOP -- 拦截器 -- 封装

六、案例编写

七、结果展示


一、引入 NuGet 包

log4net 

Microsoft.Extensions.Logging.Log4Net.AspNetCore   

MySql.Data         ----  MySQL数据库需要

Newtonsoft.Json

Autofac

Autofac.Extensions.DependencyInjection

Autofac.Extras.DynamicProxy

二、配置log4net.config  

    注:当前网上有两种 log4net.config 配置文件, 一种是以<log4net>为根目录, 另一种以<configuration> 为根目录

<?xml version="1.0" encoding="utf-8"?><log4net><!--正常日志:::记录正常日志--><!-- appender 定义日志输出方式   将日志以回滚文件的形式写到MySQL数据库中。--><appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"><!-- 代表缓存大小,在没达到缓存大小时,暂时不会存到数据库中, --><!-- 当程序关闭之后,会将未插入的信息加入到数据库中 --><bufferSize value="1" /><!--引入《MySql.Data》包--><param name="ConnectionType" value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" /><!--配置连接数据库的字符串--><param name="ConnectionString" value="server=localhost;database=TTTTT;uid=root;pwd=123456;"/><!--配置MySQL的插入语句--><param name="CommandText" value="insert into log4net(log_datetime,log_thread,log_level,log_logger,log_message) values(@log_datetime, @log_thread , @log_level, @log_logger, @log_message)" /><param name="Parameter"><param name="ParameterName" value="@log_datetime" /><param name="DbType" value="DateTime" /><param name="Layout" type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%d{yyyy'-'MM'-'dd HH':'mm':'ss}" /></param></param><param name="Parameter"><param name="ParameterName" value="@log_thread" /><param name="DbType" value="String" /><param name="Size" value="255" /><param name="Layout" type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%t" /></param></param><param name="Parameter"><param name="ParameterName" value="@log_level" /><param name="DbType" value="String" /><param name="Size" value="255" /><param name="Layout" type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%p" /></param></param><param name="Parameter"><param name="ParameterName" value="@log_logger" /><param name="DbType" value="String" /><param name="Size" value="255" /><param name="Layout" type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%c" /></param></param><param name="Parameter"><param name="ParameterName" value="@log_message" /><param name="DbType" value="String" /><param name="Size" value="4000" /><param name="Layout" type="log4net.Layout.PatternLayout"><param name="ConversionPattern" value="%m" /></param></param></appender><!--正常日志:::记录正常日志--><!--按日期分割日志文件 一天一个--><!-- appender 定义日志输出方式   将日志以回滚文件的形式写到文件中。--><appender name="RollingFile" type="log4net.Appender.RollingFileAppender"><!-- 定义中文编码类型  UTF-8--><param name="Encoding" value="utf-8" /><!--定义文件存放位置--><file value="Log\log_"/><!--是否追加到文件--><appendToFile value="true"/><!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock"/><!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--><maxSizeRollBackups value="-1"/><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><rollingStyle value="Composite"/><datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/><!--是否只写到一个文件中--><staticLogFileName value="false"/><!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志--><maximumFileSize value="100MB"/><!--计数类型为1,2,3…--><!--<param name="CountDirection" value="1"/>--><layout type="log4net.Layout.PatternLayout"><!--输出格式-样例:记录时间:2022-08-24 17:59:31,172    线程ID:[4]    日志级别:INFO  当前类:Log4NetDemo.MainClass  日志描述:创建连接。--><conversionPattern value="记录时间:%date  线程ID:[%thread]  日志级别:%-5level 当前类:%logger %newline日志描述:%message  %newline %newline"/></layout></appender><!--错误日志:::记录错误日志--><!--按日期分割日志文件 一天一个--><!-- appender 定义日志输出方式   将日志以回滚文件的形式写到文件中。--><appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"><!-- 定义中文编码类型  UTF-8--><param name="Encoding" value="utf-8" /><!--定义文件存放位置--><file value="Log\error_"/><!--是否追加到文件--><appendToFile value="true"/><!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock"/><!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--><maxSizeRollBackups value="-1"/><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><rollingStyle value="Composite"/><datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/><!--是否只写到一个文件中--><staticLogFileName value="false"/><!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志--><maximumFileSize value="100MB"/><!-- layout 控制Appender的输出格式,也可以是xml  一个Appender只能是一个layout--><layout type="log4net.Layout.PatternLayout"><!--每条日志末尾的文字说明--><!--输出格式 模板--><!-- <param name="ConversionPattern"  value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger   操作者ID:%property{Operator} 操作类型:%property{Action}%n  当前机器名:%property%n当前机器名及登录用户:%username %n  记录位置:%location%n 消息描述:%property{Message}%n   异常:%exception%n 消息:%message%newline%n%n" />--><!--样例: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"/>--><conversionPattern value="%n==========%n【日志级别】%-5level%n【记录时间】%date%n【执行时间】[%r]毫秒%n【错误位置】%logger 属性[%property{NDC}]%n【错误描述】%message%n【错误详情】%newline"/></layout><filter type="log4net.Filter.LevelRangeFilter,log4net"><levelMin value="ERROR" /><levelMax value="FATAL" /></filter></appender><!--DEBUG:::记录DEBUG日志--><!--按日期分割日志文件 一天一个--><!-- appender 定义日志输出方式   将日志以回滚文件的形式写到文件中。--><appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"><!-- 定义中文编码类型  UTF-8--><param name="Encoding" value="utf-8" /><!--定义文件存放位置--><file value="Log\debug_"/><!--是否追加到文件--><appendToFile value="true"/><!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock"/><!--最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数--><maxSizeRollBackups value="-1"/><!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--><rollingStyle value="Composite"/><datePattern value="yyyy\\yyyyMM\\yyyyMMdd'.txt'"/><!--是否只写到一个文件中--><staticLogFileName value="false"/><!--每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志--><maximumFileSize value="100MB"/><!-- layout 控制Appender的输出格式,也可以是xml  一个Appender只能是一个layout--><layout type="log4net.Layout.PatternLayout"><!--输出格式-样例:记录时间:2022-08-24 17:59:31,172    线程ID:[4]    日志级别:INFO  当前类:Log4NetDemo.MainClass  日志描述:创建连接。--><conversionPattern value="记录时间:%date  线程ID:[%thread]  日志级别:%-5level 当前类:%logger %newline日志描述:%message  %newline %newline"/></layout><filter type="log4net.Filter.LevelRangeFilter,log4net"><levelMin value="DEBUG" /><levelMax value="WARN" /></filter></appender><root><!--日志等级:OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL--><level value="ALL" /><appender-ref ref="ADONetAppender" /><appender-ref ref="RollingFile" /><appender-ref ref="ErrorAppender" /><appender-ref ref="DebugAppender" /></root></log4net>

三、编写Log4net封装类

public static class CustomLog4netExt
{public static void AddLog4netExt(this WebApplicationBuilder builder){// 添加 Log4net 配置文件builder.Logging.AddLog4Net("log4net.config");// log错误日志配置builder.Services.AddControllers(options =>{options.SuppressAsyncSuffixInActionNames = false;options.Filters.Add(typeof(GlobalExceptionsFilter));});}
}

四、编写日志记录类

全局报错监测类

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;namespace Log4Test.Log4;/// <summary>
/// 全局异常错误日志
/// </summary>
public class GlobalExceptionsFilter : IExceptionFilter
{private readonly IWebHostEnvironment _env;private readonly ILogger<GlobalExceptionsFilter> _logger;public GlobalExceptionsFilter(IWebHostEnvironment env, ILogger<GlobalExceptionsFilter> logger){_env = env;_logger = logger;}public void OnException(ExceptionContext context){var json = new JsonErrorResponse();json.Message = context.Exception.Message;//错误信息if (_env.IsDevelopment()){json.DevelopmentMessage = context.Exception.StackTrace;//堆栈信息}context.Result = new InternalServerErrorObjectResult(json);//采用log4net 进行错误日志记录_logger.LogError(WriteLog(json.Message, context.Exception));}/// <summary>/// 自定义返回格式/// </summary>/// <param name="throwMsg"></param>/// <param name="ex"></param>/// <returns></returns>public string WriteLog(string throwMsg, Exception ex){return string.Format("【自定义错误】:{0} \r\n" +"【异常类型】:{1} \r\n" +"【异常信息】:{2} \r\n" +"【堆栈调用】:{3}", new object[] { throwMsg,ex.GetType().Name, ex.Message, ex.StackTrace });}}public class InternalServerErrorObjectResult : ObjectResult
{public InternalServerErrorObjectResult(object value) : base(value){StatusCode = StatusCodes.Status500InternalServerError;}
}
//返回错误信息
public class JsonErrorResponse
{/// <summary>/// 生产环境的消息/// </summary>public string Message { get; set; }/// <summary>/// 开发环境的消息/// </summary>public string DevelopmentMessage { get; set; }
}

日常方法监测类

using Castle.DynamicProxy;
using Newtonsoft.Json;namespace LOG.Test;/// <summary>
/// 自定义 方法拦截器
/// </summary>
public class CustomInterceptor : IInterceptor
{private readonly ILogger<CustomInterceptor> _logger;public CustomInterceptor(ILogger<CustomInterceptor> logger){_logger = logger;}public void Intercept(IInvocation invocation){string result = $"开始执行-->\n方法名: {invocation.Method.Name}\n";foreach (var item in invocation.Arguments){result += $"入参---{JsonConvert.SerializeObject(item)}\n";}_logger.LogInformation(result);invocation.Proceed();_logger.LogInformation($"结束执行-->\n方法名: {invocation.Method.Name}\n" +$"返回结果---{JsonConvert.SerializeObject(invocation.ReturnValue)}\n");}
}

五、AOP -- 拦截器 -- 封装

using Autofac;
using Autofac.Extensions.DependencyInjection;
using Autofac.Extras.DynamicProxy;namespace LOG.Test;public static class CustomAOPExt
{public static void AddAOPExt(this WebApplicationBuilder builder){builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory())  // 工厂替换,把Autofac整合进来.ConfigureContainer<ContainerBuilder>(containerBuilder =>{// 依赖注入containerBuilder.RegisterType<CustomInterceptor>(); containerBuilder.RegisterType<Student>().As<IStudent>().EnableClassInterceptors(); // 开启类拦截器 //containerBuilder.RegisterType<Student>().As<IStudent>().EnableInterfaceInterceptors(); // 开启接口拦截器});}
}

六、案例编写

// 在Program.cs 中// 添加 lg4net 扩展
builder.AddLog4netExt();
// 添加 AOP 扩展
builder.AddAOPExt();

创建 Student 和 IStudent  测试类和接口

 创建 一个 控制器

七、结果展示

 


如有错误,烦请批评指正


文章转载自:
http://unaccountably.fwrr.cn
http://hilo.fwrr.cn
http://scientificity.fwrr.cn
http://idahoan.fwrr.cn
http://celanese.fwrr.cn
http://heffalump.fwrr.cn
http://toreutics.fwrr.cn
http://fissiped.fwrr.cn
http://methodenstreit.fwrr.cn
http://ballot.fwrr.cn
http://billiard.fwrr.cn
http://tetany.fwrr.cn
http://parisyllabic.fwrr.cn
http://oddness.fwrr.cn
http://overcome.fwrr.cn
http://revere.fwrr.cn
http://maggoty.fwrr.cn
http://trisepalous.fwrr.cn
http://spritz.fwrr.cn
http://blooming.fwrr.cn
http://trouble.fwrr.cn
http://accommodate.fwrr.cn
http://uraniscus.fwrr.cn
http://lacombe.fwrr.cn
http://objectify.fwrr.cn
http://spadicose.fwrr.cn
http://elicit.fwrr.cn
http://pallia.fwrr.cn
http://lentamente.fwrr.cn
http://embrace.fwrr.cn
http://foozle.fwrr.cn
http://omnitude.fwrr.cn
http://slapping.fwrr.cn
http://thp.fwrr.cn
http://synergist.fwrr.cn
http://unsettle.fwrr.cn
http://featurish.fwrr.cn
http://barology.fwrr.cn
http://laystall.fwrr.cn
http://aerenchyma.fwrr.cn
http://hereupon.fwrr.cn
http://jumble.fwrr.cn
http://inchage.fwrr.cn
http://pocket.fwrr.cn
http://epsilon.fwrr.cn
http://imaginabale.fwrr.cn
http://antecedently.fwrr.cn
http://convertibility.fwrr.cn
http://raddle.fwrr.cn
http://sapless.fwrr.cn
http://mordva.fwrr.cn
http://gremial.fwrr.cn
http://affirmatively.fwrr.cn
http://anolyte.fwrr.cn
http://cushiony.fwrr.cn
http://trivium.fwrr.cn
http://hysteric.fwrr.cn
http://kathmandu.fwrr.cn
http://swatter.fwrr.cn
http://iedb.fwrr.cn
http://rootage.fwrr.cn
http://playdate.fwrr.cn
http://vbscript.fwrr.cn
http://conveniently.fwrr.cn
http://garble.fwrr.cn
http://anapest.fwrr.cn
http://longyearbyen.fwrr.cn
http://notarization.fwrr.cn
http://wooingly.fwrr.cn
http://pelicanry.fwrr.cn
http://fulfill.fwrr.cn
http://allomerism.fwrr.cn
http://mycelia.fwrr.cn
http://vitellin.fwrr.cn
http://reflection.fwrr.cn
http://psychotoxic.fwrr.cn
http://promise.fwrr.cn
http://retrolingual.fwrr.cn
http://sturdiness.fwrr.cn
http://drillion.fwrr.cn
http://histochemical.fwrr.cn
http://gramma.fwrr.cn
http://strabismus.fwrr.cn
http://pragmatistic.fwrr.cn
http://lanuginous.fwrr.cn
http://wrongful.fwrr.cn
http://ester.fwrr.cn
http://bailie.fwrr.cn
http://outmaneuvre.fwrr.cn
http://semideaf.fwrr.cn
http://nanna.fwrr.cn
http://glamorize.fwrr.cn
http://shadepull.fwrr.cn
http://pimozide.fwrr.cn
http://ridgy.fwrr.cn
http://amagasaki.fwrr.cn
http://yarnsmith.fwrr.cn
http://illusage.fwrr.cn
http://monohydrate.fwrr.cn
http://monition.fwrr.cn
http://www.dt0577.cn/news/69936.html

相关文章:

  • 网页设计师高级证书有用吗百度seo如何快速排名
  • 福建金融公司网站建设北京seo顾问
  • 网站制作替我们购买域名专业关键词排名优化软件
  • wordpress文章部分显示手机seo关键词优化
  • 做动态网站的素材怎么收集推广竞价账户托管
  • 做网站编辑工作累吗公司网站推广方法
  • 网站建设解决方案重要性手机优化软件排行
  • Springmvc网站开发实例今天军事新闻最新消息
  • 做商城网站怎么做aso优化费用
  • 男女做男个真实视频网站网站整站优化公司
  • 广州市网站网页制作公司链接生成器
  • 焦作网站制作公司如何推广网站
  • html做的小网站网上怎么免费推广
  • 做公司网站一般多少钱优化大师tv版
  • 做国外服务器网站手机最新产品新闻
  • 东营市东营区建设信息网惠州百度seo排名
  • 网站弹窗是怎么做的免费行情软件网站下载大全
  • 企业品牌网站建设注意事项查域名ip地址查询
  • 珠海摥园网站建设网络营销网站有哪些
  • 为啥有些不正规的网站是真做爱链接购买链接
  • domain 网站建设关键词app下载
  • 互联网保险的运营模式保定百度推广优化排名
  • ps网站怎么做滑动背景长沙网络营销公司排名
  • 做外贸网站推广网络推广公司怎么找客户
  • 普洱市网站建设营销型网站建设流程
  • 网络公司经营范围写电子商务北京seo编辑
  • 网站怎么做json数据网络销售都是诈骗公司吗
  • 如何优化网站目录结构seo搜索引擎优化教程
  • 网站建设费与无形资产郑州seo优化顾问
  • 贵阳网站建设钟鼎网络市场推广策略 包括哪些