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

苏州吴江建设局招投标网站公司在网上做网站怎么做账

苏州吴江建设局招投标网站,公司在网上做网站怎么做账,html在线编写网站,阐述企业搭建网站的重要性文章目录一、操作类日志处理【环绕增强】aop环绕增强导包第一步#xff1a;自定义注解interface第二步#xff1a;在Controller写一个测试的方法#xff1a;第三步#xff1a;编写LogAspect增强类与增强方法日志写入数据库#xff08;使用mybatis#xff09;第一步#… 文章目录一、操作类日志处理【环绕增强】aop环绕增强导包第一步自定义注解interface第二步在Controller写一个测试的方法第三步编写LogAspect增强类与增强方法日志写入数据库使用mybatis第一步创建关于日志的数据库用户、操作、方法、执行时间、个人服务器IP、操作时间等第二步创建实体类第三步 dao层省略mapper和service层第四步 LogAspect增强类与增强方法两个工具类 IPUtils 、HttpContextUtils 日志写入文件日志写入搜索引擎非分布式引擎二、报错类日志处理logback第一步创建logback-spring.xml文件放入resource下第二步配置application.properties文件第三步编写controller测试一、操作类日志处理【环绕增强】 aop环绕增强 导包 !-- aop依赖 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency第一步自定义注解interface interface 注解类自定义注解Target 用来说明该注解可以被声明在那些元素之前 ElementType.METHOD说明该注解只能被声明在一个类的方法前 Retention 用来说明该注解类的生命周期。 RetentionPolicy.RUNTIME注解保留在程序运行期间此时可以通过反射获得定义在某个类上的所有注解 /*** 自定义注解* 用于在Controller层使用注解标注哪个方法需要增加日志*/Target(ElementType.METHOD) //在方法加载Log Retention(RetentionPolicy.RUNTIME) public interface Log {String value() default ; }第二步在Controller写一个测试的方法 RestController RequestMapping(/index)public class IndexController {/*一般将这个日志放到Controller,因为要记录方法的执行时间。也可以记录service,但是最好Controller*/Log(这是Index的修改方法)GetMapping(/updateIndex)public int updateIndex(){System.out.println(这是修改);return 10;} }第三步编写LogAspect增强类与增强方法 Aspect Component public class LogAspect {//切入点指定当使用Log注解时进入环绕增强Pointcut(annotation(com.wy.log.Log))public void pointcut() {}/*** 环绕增强* param point* return*/Around(pointcut())public Object around(ProceedingJoinPoint point) {try {System.out.println(执行环绕增强..............开始);Object result point.proceed(); //调用目标方法point.proceed()System.out.println(执行环绕增强..............结束);return result; //与Controller的返回值一致没什么用} catch (Throwable throwable) {throwable.printStackTrace();}return null;} }执行http://localhost:8080/index/updateIndex 结果 说明调用目标的方法的输出结果没什么大用就是Controller的返回值 日志写入数据库使用mybatis 使用mybatis的话要导入mybatis的核心包和sql驱动配置文件 !--mybatis的核心包-- dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.3/version /dependency !--mysql驱动-- dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.44/version /dependencyspring:datasource:username: zzzzpassword: zzzzurl: jdbc:mysql://localhost:3306/数据库名?useUnicodetruecharacterEncodingutf8useSSLfalsedriver-class-name: com.mysql.jdbc.Driver第一步创建关于日志的数据库用户、操作、方法、执行时间、个人服务器IP、操作时间等 DROP TABLE IF EXISTS sys_log; CREATE TABLE sys_log (ID bigint(20) NOT NULL AUTO_INCREMENT,USERNAME varchar(50) DEFAULT NULL COMMENT 用户名,OPERATION varchar(50) DEFAULT NULL COMMENT 用户操作,TIME int(11) DEFAULT NULL COMMENT 响应时间,METHOD varchar(200) DEFAULT NULL COMMENT 请求方法,PARAMS varchar(500) DEFAULT NULL COMMENT 请求参数,IP varchar(64) DEFAULT NULL COMMENT IP地址,CREATE_TIME timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间,PRIMARY KEY (ID) ) ENGINEInnoDB DEFAULT CHARSETutf8;第二步创建实体类 Data public class SysLog {private Long id;private String username;private String operation;private Integer time;private String method;private String params;private String ip;private String createTime; }第三步 dao层省略mapper和service层 Repository public interface SysLogDao {Insert(insert into sys_log(USERNAME,OPERATION,TIME,METHOD,PARAMS,IP) values(#{username},#{operation},#{time},#{method},#{params},#{ip}))public int insertSysLog(SysLog sysLog); }第四步 LogAspect增强类与增强方法 Aspect Component public class LogAspect {Autowiredprivate SysLogDao sysLogDao;//切入点指定当使用Log注解时进入环绕增强Pointcut(annotation(com.wy.log.Log))public void pointcut() {}/*** 环绕增强* param point* return*/Around(pointcut())public Object around(ProceedingJoinPoint point) {try {//1、获取时间Long beginTime System.currentTimeMillis(); //调取方法前开始计时(毫秒)Object res point.proceed();//调用目标方法point.proceed()Long endTime System.currentTimeMillis(); //调取方法前开始计时(毫秒)Long time endTime-beginTime;//2、获取本地IP:工具类直接使用//从request中解析出ip地址HttpServletRequest request HttpContextUtils.getHttpServletRequest();//3、拿到方法上的描述某个操作MethodSignature signature (MethodSignature) point.getSignature();Method method signature.getMethod();Log logAnnotation method.getAnnotation(Log.class);//4、请求的方法名String className point.getTarget().getClass().getName();String methodName signature.getName();//5、请求的参数// 请求的方法参数值Object[] args point.getArgs();// 请求的方法参数名称String params ;LocalVariableTableParameterNameDiscoverer u new LocalVariableTableParameterNameDiscoverer();String[] paramNames u.getParameterNames(method);if (args ! null paramNames ! null) {for (int i 0; i args.length; i) {params paramNames[i] : args[i];}/*sysLog.setParams(params);*/}SysLog sysLog new SysLog();sysLog.setUsername(朱尔斯); //一般是从session或request中拿取sysLog.setTime(Integer.parseInt(time.toString()));sysLog.setIp(IPUtils.getIpAddr(request));sysLog.setOperation(logAnnotation.value());sysLog.setMethod(className . methodName ());sysLog.setParams(params);sysLogDao.insertSysLog(sysLog);return res;} catch (Throwable throwable) {throwable.printStackTrace();}return null;} }执行http://localhost:8080/index/updateIndex 结果 两个工具类 IPUtils 、HttpContextUtils package com.hz.utils; import javax.servlet.http.HttpServletRequest; public class IPUtils {/*** 获取IP地址* 使用Nginx等反向代理软件 则不能通过request.getRemoteAddr()获取IP地址* 如果使用了多级反向代理的话X-Forwarded-For的值并不止一个而是一串IP地址X-Forwarded-For中第一个非unknown的有效IP字符串则为真实IP地址*/public static String getIpAddr(HttpServletRequest request) {String ip request.getHeader(x-forwarded-for);if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(Proxy-Client-IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getHeader(WL-Proxy-Client-IP);}if (ip null || ip.length() 0 || unknown.equalsIgnoreCase(ip)) {ip request.getRemoteAddr();}return 0:0:0:0:0:0:0:1.equals(ip) ? 127.0.0.1 : ip;} }package com.hz.utils; import javax.servlet.http.HttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;public class HttpContextUtils {public static HttpServletRequest getHttpServletRequest() {return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();} }日志写入文件 日志写入搜索引擎非分布式引擎 二、报错类日志处理logback 【之前有说过log4j的处理方式https://blog.csdn.net/m0_70083523/article/details/127498052】 第一步创建logback-spring.xml文件放入resource下 关于logback的日志配置网上就能下载到【此文件私发】 ?xml version1.0 encodingUTF-8? !-- 日志级别从低到高分为TRACE DEBUG INFO WARN ERROR FATAL如果设置为WARN则低于WARN的信息都不会输出 -- !-- scan:当此属性设置为true时配置文件如果发生改变将会被重新加载默认值为true -- !-- scanPeriod:设置监测配置文件是否有修改的时间间隔如果没有给出时间单位默认单位是毫秒。当scan为true时此属性生效。默认的时间间隔为1分钟。 -- !-- debug:当此属性设置为true时将打印出logback内部日志信息实时查看logback运行状态。默认值为false。 -- configuration scantrue scanPeriod10 seconds!--include resourceorg/springframework/boot/logging/logback/base.xml /--contextNamelogback/contextName!-- name的值是变量的名称value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后可以使“${}”来使用变量。 --property namelog.path valueD:/nmyslog/nmys /!-- 彩色日志 --!-- 彩色日志依赖的渲染类 --conversionRule conversionWordclr converterClassorg.springframework.boot.logging.logback.ColorConverter /conversionRule conversionWordwex converterClassorg.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter /conversionRule conversionWordwEx converterClassorg.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter /!-- 彩色日志格式 --property nameCONSOLE_LOG_PATTERN value${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}/!--输出到控制台--appender nameCONSOLE classch.qos.logback.core.ConsoleAppender!--此日志appender是为开发使用只配置最底级别控制台输出的日志级别是大于或等于此级别的日志信息--filter classch.qos.logback.classic.filter.ThresholdFilterlevelinfo/level/filterencoderPattern${CONSOLE_LOG_PATTERN}/Pattern!-- 设置字符集 --charsetUTF-8/charset/encoder/appender!--输出到文件--!-- 时间滚动输出 level为 DEBUG 日志 --appender nameDEBUG_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_debug.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志归档 --fileNamePattern${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录debug级别的 --filter classch.qos.logback.classic.filter.LevelFilterleveldebug/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 INFO 日志 --appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_info.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 每天日志归档路径以及格式 --fileNamePattern${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录info级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelinfo/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 WARN 日志 --appender nameWARN_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_warn.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录warn级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelwarn/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 时间滚动输出 level为 ERROR 日志 --appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender!-- 正在记录的日志文件的路径及文件名 --file${log.path}/log_error.log/file!--日志文件输出格式--encoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/patterncharsetUTF-8/charset !-- 此处设置字符集 --/encoder!-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize100MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文件保留天数--maxHistory15/maxHistory/rollingPolicy!-- 此日志文件只记录ERROR级别的 --filter classch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!--logger用来设置某一个包或者具体的某一个类的日志打印级别、以及指定appender。logger仅有一个name属性一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF还有一个特俗值INHERITED或者同义词NULL代表强制执行上级的级别。如果未设置此属性那么当前logger将会继承上级的级别。addtivity:是否向上级logger传递打印信息。默认是true。--!--logger nameorg.springframework.web levelinfo/--!--logger nameorg.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor levelINFO/--!--使用mybatis的时候sql语句是debug下才会打印而这里我们只配置了info所以想要查看sql语句的话有以下两种操作第一种把root levelinfo改成root levelDEBUG这样就会打印sql不过这样日志那边会出现很多其他消息第二种就是单独给dao下目录配置debug模式代码如下这样配置sql语句会打印其他还是正常info级别--!--root节点是必选节点用来指定最基础的日志输出级别只有一个level属性level:用来设置打印级别大小写无关TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF不能设置为INHERITED或者同义词NULL。默认是DEBUG可以包含零个或多个元素标识这个appender将会添加到这个logger。--!--开发环境:打印控制台--springProfile namedevlogger namecom.nmys.view leveldebug//springProfileroot levelinfoappender-ref refCONSOLE /appender-ref refDEBUG_FILE /appender-ref refINFO_FILE /appender-ref refWARN_FILE /appender-ref refERROR_FILE //root!--生产环境:输出到文件--!--springProfile namepro--!--root levelinfo--!--appender-ref refCONSOLE /--!--appender-ref refDEBUG_FILE /--!--appender-ref refINFO_FILE /--!--appender-ref refERROR_FILE /--!--appender-ref refWARN_FILE /--!--/root--!--/springProfile-- /configuration第二步配置application.properties文件 #读取配置文件 logging.configclasspath:logback-spring.xml#上面文件中也有路径的配置如果上面没有则可以在此处配置 #日志打印文件所在目录 logging.pathD:/项目名/log第三步编写controller测试 //这个类要是当前Controller类 Logger log Logger.getLogger(SfUserController.class); log.info(要输出的内容//输出信息 ------------------------------------------------- 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL 如果配置OFF则不打出任何信息 如果配置为INFO这样只显示INFO, WARN, ERROR的log信息而DEBUG信息不会被显示
http://www.dnsts.com.cn/news/195128.html

相关文章:

  • 无锡企业网站制作一般多少钱wordpress中英文站点
  • 券多多是谁做的网站河西苏州网站建设
  • 黄贝建设网站建设周口网站建设 网站制作 网络推广
  • 网站服务器租用年度价格做交易网站什么开发语言
  • 基于分布式控件的网站开发框架学校网站建设与管理
  • 免费做视频网站长治网站制作平台
  • 网站如何做修改密码的相关验证广州电商运营培训哪个机构好
  • 婚纱网站模板免费下载西安建设工程交易网站
  • 织梦网站采集如何做参考效果图网站
  • 韶关营销网站开发做网站退款怎么做会计分录
  • 微课网站开发上海平台网站建设哪家有
  • 蓝色响应式机械类网站四川建设行业数据共享平台的网站
  • 外贸常用的网站如何自己做个人微信小程序
  • 甘肃省铁路投资建设集团有限公司网站免费创建个人商城网站
  • 做网站需不需要云数据库政务公开和网站建设工作问题
  • 西安网站建设资讯传奇游戏平台
  • 宜昌公司做网站东莞粤保保安公司
  • 做网站的资金来源郑州代做网站
  • 台州外贸网站建设wordpress 后台 安全
  • 做暧暖ox免费视频网站沈阳建设工程管理中心
  • 高端网站建设公司服务好吗搭建企业网站流程
  • 赛门博网站建设wordpress不同分类文章不同模板
  • 仪征市城乡建设局网站网站开发如何让图片加载的更快
  • 南开集团网站建设工作汇报
  • 北京怎样建设公司网站线上托管
  • 怎么编写网站代码wordpress 访问权限
  • 大连专业做网站网站建设 体会
  • 建设网站里的会员系统网站备案有必要吗
  • 做品牌形象网站做机加工的网站
  • 网站建设项目进度计划信息化建设 网站