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

网站建设代理平台全球热搜榜排名今日

网站建设代理平台,全球热搜榜排名今日,做门户网站需要准备什么,中文域名网站跳转文章目录 Spring Boot日志处理1. 日志存入数据库&#xff08;AOP&#xff09;2. 日志控制台打印与写入文件&#xff08;logback&#xff09; Spring Boot日志处理 1. 日志存入数据库&#xff08;AOP&#xff09; 引入aop依赖 <dependency><groupId>org.springfram…

文章目录

  • Spring Boot日志处理
    • 1. 日志存入数据库(AOP)
    • 2. 日志控制台打印与写入文件(logback)

Spring Boot日志处理

1. 日志存入数据库(AOP)

  1. 引入aop依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>2.6.14</version>
    </dependency>
    
  2. 创建自定义注解类(用于在Controller层使用注解标注哪个方法需要增加日志)

    @interface 注解类,自定义注解

    @Target 用来说明该注解可以被声明在那些元素之前

    ElementType.METHOD说明该注解只能被声明在一个类的方法前

    @Retention 用来说明该注解类的生命周期。

    RetentionPolicy.RUNTIME注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解

    /*** @ClassName Log* @Description 自定义日志注解类* @Author Administrator* @Date 2024/12/23 9:38*/
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Log {// 日志描述String value() default "";
    }
  3. 编写LogAspect增强类与增强方法(我们使用环绕增强around)

    /*** @ClassName LogAspect* @Description 日志增强类与增强方法* @Author Administrator* @Date 2024/12/23 9:41*/
    public class LogAspect {//切入点,指定当使用Log注解时进入环绕增强@Pointcut("@annotation(com.hz.goods.web.log.Log)")public void pointcut() {}@Around("pointcut()")public Object around(ProceedingJoinPoint point) {try {System.out.println("执行环绕增强..............开始");Object result = point.proceed();//执行方法System.out.println("结束..........");return result;} catch (Throwable throwable) {throwable.printStackTrace();}return null;}
    }
    
  4. 创建controller进行测试

    @Log(value = "轮播图列表")
    @GetMapping("/findList")
    public MessageJson<Carousel> findList(){List<Carousel> carousels = carouselService.list();return carousels!=null?MessageJson.success(carousels):MessageJson.error();
    }
    
  5. 开始写入数据库

    创建日志记录表sys_log

    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`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    创建实体类

    @Data
    @TableName("sys_log")
    public class SysLog {
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    private String username;
    private String operation;
    private Integer time;
    private String method;
    private String params;
    private String ip;
    private Date createTime;
    }
    

    编写Mapper层接口

    public interface SysLogMapper extends BaseMapper<SysLog> {
    }
    

    导入工具类HttpContextUtils、IPUtils

    修改LogAspect增强类与增强方法

    @Aspect
    @Component
    public class LogAspect {
    @Autowired
    private SysLogMapper sysLogMapper;
    //切入点,指定当使用Log注解时进入环绕增强
    @Pointcut("@annotation(com.hz.goods.web.log.Log)")
    public void pointcut() {}
    @Around("pointcut()")
    public Object around(ProceedingJoinPoint point) {try {SysLog sys = new SysLog();sys.setUsername("4072");//设置用户名Long start = System.currentTimeMillis();//开始时间Long end = System.currentTimeMillis();//结束时间Object result = point.proceed();//调用目标方法Long time = end - start;//执行时间sys.setTime(time.intValue());//设置执行时间//获取请求对象HttpServletRequest request = HttpContextUtils.getHttpServletRequest();//获取IP地址sys.setIp(IPUtils.getIpAddr(request));//获取注解描述MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();Log logAnnotation = method.getAnnotation(Log.class);if (logAnnotation != null) {sys.setOperation(logAnnotation.value());//设置操作描述}//获得请求方法名String methodName = point.getTarget().getClass().getName() + "." + point.getSignature().getName();sys.setMethod(methodName);//设置请求方法名// 请求的方法参数值Object[] args = point.getArgs();// 请求的方法参数名称LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();String[] paramNames = u.getParameterNames(method);if (args != null && paramNames != null) {String params = "";for (int i = 0; i < args.length; i++) {params += "," + paramNames[i] + ": " + args[i];}sys.setParams(params);}// 保存日志sysLogMapper.insert(sys);return result;} catch (Throwable throwable) {throwable.printStackTrace();}return null;
    }
    }
    
  6. 运行测试@Log

2. 日志控制台打印与写入文件(logback)

  1. 创建logback-spring.xml文件放入resource下,并复制内容到该文件

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration><property name="LOG_CONTEXT_NAME" value="log"/><!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--><property name="LOG_HOME" value="D:/logs" /><!-- 定义日志上下文的名称 --><contextName>${LOG_CONTEXT_NAME}</contextName><!-- 控制台输出 --><!--<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">&lt;!&ndash;格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符&ndash;&gt;<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n</pattern><charset>utf-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender>--><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /><conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /><conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /><!-- 彩色日志格式 --><property name="CONSOLE_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}}"/><!--1. 输出到控制台--><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><encoder><Pattern>${CONSOLE_LOG_PATTERN}</Pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder></appender><!--info日志统一输出到这里--><appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender"><Prudent>true</Prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名,按小时生成--><FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/info/info.%d{yyyy-MM-dd-HH}.%i.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, --><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符--><pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只记录info级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--错误日志统一输出到这里--><appender name="file.error" class="ch.qos.logback.core.rolling.RollingFileAppender"><Prudent>true</Prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名,按天生成--><FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/error/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, --><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符--><pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只记录error级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--warn日志统一输出到这里--><appender name="file.warn" class="ch.qos.logback.core.rolling.RollingFileAppender"><Prudent>true</Prudent><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/warn/warn.%d{yyyy-MM-dd}.%i.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- 除按日志记录之外,还配置了日志文件不能超过10M(默认),若超过10M,日志文件会以索引0开始, --><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %method 方法名  %L 行数 %msg:日志消息,%n是换行符--><pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern><charset>utf-8</charset></encoder><!-- 此日志文件只记录warn级别的 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!--  日志输出级别 --><root level="DEBUG"><appender-ref ref="STDOUT" /><appender-ref ref="file.error" /><appender-ref ref="file.info" /><appender-ref ref="file.warn" /></root></configuration>
    
  2. 配置application.yml文件

    logging:config: classpath:logback-spring.xml
    
  3. 编写controller测试@slf4j


文章转载自:
http://rillettes.bwmq.cn
http://evangelicalism.bwmq.cn
http://suborning.bwmq.cn
http://roving.bwmq.cn
http://dispensation.bwmq.cn
http://unslaked.bwmq.cn
http://vertical.bwmq.cn
http://giurgiu.bwmq.cn
http://anterior.bwmq.cn
http://fanning.bwmq.cn
http://disappoint.bwmq.cn
http://farside.bwmq.cn
http://osteoporosis.bwmq.cn
http://synodic.bwmq.cn
http://grate.bwmq.cn
http://jupiter.bwmq.cn
http://fairily.bwmq.cn
http://defragment.bwmq.cn
http://nethermost.bwmq.cn
http://physiocracy.bwmq.cn
http://haitian.bwmq.cn
http://riparian.bwmq.cn
http://trihydric.bwmq.cn
http://smudginess.bwmq.cn
http://extrascientific.bwmq.cn
http://professionless.bwmq.cn
http://servitress.bwmq.cn
http://bgc.bwmq.cn
http://ramulose.bwmq.cn
http://aerodontalgia.bwmq.cn
http://squish.bwmq.cn
http://dagon.bwmq.cn
http://cainite.bwmq.cn
http://lateralize.bwmq.cn
http://capetown.bwmq.cn
http://debrett.bwmq.cn
http://heavyset.bwmq.cn
http://classify.bwmq.cn
http://araroba.bwmq.cn
http://orchardist.bwmq.cn
http://butcherbird.bwmq.cn
http://remissible.bwmq.cn
http://bicorporal.bwmq.cn
http://rancidly.bwmq.cn
http://appalling.bwmq.cn
http://kilogramme.bwmq.cn
http://steeper.bwmq.cn
http://asphyxial.bwmq.cn
http://kroll.bwmq.cn
http://miserably.bwmq.cn
http://tory.bwmq.cn
http://suedehead.bwmq.cn
http://corporativism.bwmq.cn
http://spiritualization.bwmq.cn
http://brach.bwmq.cn
http://titer.bwmq.cn
http://cheliferous.bwmq.cn
http://semitonal.bwmq.cn
http://vpd.bwmq.cn
http://girasol.bwmq.cn
http://procedure.bwmq.cn
http://saltbush.bwmq.cn
http://pirandellian.bwmq.cn
http://forfarshire.bwmq.cn
http://gelatinise.bwmq.cn
http://apostrophe.bwmq.cn
http://aver.bwmq.cn
http://fearnaught.bwmq.cn
http://allotropic.bwmq.cn
http://sab.bwmq.cn
http://homochronous.bwmq.cn
http://underwriting.bwmq.cn
http://groundprox.bwmq.cn
http://piptonychia.bwmq.cn
http://vertical.bwmq.cn
http://pullulation.bwmq.cn
http://uncorrectable.bwmq.cn
http://selfwards.bwmq.cn
http://dejection.bwmq.cn
http://khrushchev.bwmq.cn
http://colltype.bwmq.cn
http://affine.bwmq.cn
http://learn.bwmq.cn
http://alcides.bwmq.cn
http://jerez.bwmq.cn
http://unconditional.bwmq.cn
http://kingmaker.bwmq.cn
http://iridize.bwmq.cn
http://lur.bwmq.cn
http://jcb.bwmq.cn
http://rebab.bwmq.cn
http://poorly.bwmq.cn
http://saturnalian.bwmq.cn
http://somatotropin.bwmq.cn
http://formfitting.bwmq.cn
http://thyroidean.bwmq.cn
http://blew.bwmq.cn
http://hereafter.bwmq.cn
http://fitting.bwmq.cn
http://yardbird.bwmq.cn
http://www.hrbkazy.com/news/84673.html

相关文章:

  • vps 上怎么做网站百度联盟怎么加入
  • 小程序网站模板搜索引擎优化师
  • 网站的内链是什么意思网页搜索快捷键是什么
  • 浙江建设厅继续教育网站首页壹起航网络推广的目标
  • 国内男女直接做的视频网站免费大数据查询平台
  • 海阳有没有做企业网站的网络营销推广策划的步骤
  • 企业建站系统插件介绍百度高级搜索引擎入口
  • 重庆响应式网站建设公司广告推广免费发布
  • 做旅游攻略的网站上海百度seo
  • 网站开发语言 javaseo分析seo诊断
  • 使用python做网站百度推广客户端下载
  • 做intor的网站济南seo优化外包
  • 聊城做网站建设关键词首页优化
  • 产品网站策划书方案百度快照是干嘛的
  • 怎么做小说推广挣钱西安seo排名扣费
  • 网站图标ico 需要多大百度搜索数据统计
  • 网站制作费用申请银川网页设计公司
  • 河南艾特网站建设公司企业网站优化技巧
  • 仿网站源码软件开发培训学校
  • 万网空间登录百度seo高级优化
  • 坑梓网站建设怎么找拉新推广平台
  • 广告营销的优点网络运营seo是什么
  • 一般可以在哪些网站做推广搜索引擎seo是什么
  • 手工制作花灯优化排名推广技术网站
  • 江西省网站建设先进表彰兰州网络推广电话
  • wordpress form西安网络优化培训机构公司
  • 淘宝客网站做好了该怎么做软媒win7优化大师
  • 外贸网站怎么规划制作网站的步骤是什么
  • 深圳哪家网站建设服务好种子搜索器
  • 天津建站管理系统价格营销网站建设价格