spring boot的gradle整合日志
1.引入包configurations {providedRuntime // remove default logger all*.exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'}dependencies { compile('org.springframework.boot:spring-boot-starter-data-jpa') compile('org.springframework.boot:spring-boot-starter-data-redis') compile('org.springframework.boot:spring-boot-starter-data-rest') compile('org.springframework.boot:spring-boot-starter-freemarker') compile('org.springframework.boot:spring-boot-starter-web') compile('org.springframework.boot:spring-boot-starter-web-services') compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2') compile('org.springframework.boot:spring-boot-starter-log4j2:2.0.3.RELEASE') compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2') compileOnly('org.projectlombok:lombok') runtime('mysql:mysql-connector-java') compile ('com.alibaba:fastjson:1.2.47') testCompile('org.springframework.boot:spring-boot-starter-test')} 2.在路径rescourse下配置log4j2.properties
name = PropertiesConfig#property.filename = target/logsproperty.filename = D:\\log #appenders = console, file#配置值是appender的类型,并不是具体appender实例的nameappenders = rolling appender.rolling.type = RollingFileappender.rolling.name = RollingLogFileappender.rolling.fileName=${filename}/automationlogs.logappender.rolling.filePattern = ${filename}/automationlogs-%d{MM-dd-yy-HH-mm-ss}-%i.logappender.rolling.layout.type = PatternLayoutappender.rolling.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%nappender.rolling.policies.type = Policiesappender.rolling.policies.size.type = SizeBasedTriggeringPolicyappender.rolling.policies.size.size=100MBappender.rolling.strategy.type = DefaultRolloverStrategyappender.rolling.strategy.max = 5 rootLogger.level = tracerootLogger.appenderRef.rolling.ref = RollingLogFile #rootLogger.appenderRef.rolling.ref = rolling 3.java ,其中@Slf4j注解相当于声明变量,可以直接使用log.info()
@WebFilter(filterName = "RequestLog", urlPatterns = "/*")@SpringBootApplication//重点@ServletComponentScanpublic class DemoApplication {启动类}这两个注解相当于配置过滤器
/* * Project: somp.cusma * * File Created at 2017年11月17日 * * Copyright 2016 CMCC Corporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * ZYHY Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license. */package com.sunreal.demo.recordcore.domain.login.filter; import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils; import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.util.Enumeration; /** * @Type RequestLog.java * @Desc * @version */@Component("requestLog")//重点@WebFilter(filterName = "RequestLog", urlPatterns = "/*")@Slf4jpublic class RequestLog implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; log.info("<=========================== Request Url ===========================>"); log.info(request.getRequestURL().toString()); log.info("<========================= Header Attribute ========================>"); Enumeration<?> e = request.getHeaderNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = request.getHeader(name); log.info(name + " = " + value); }log.info("<========================= Header Attribute ========================>"); String queryString = request.getQueryString(); if(!StringUtils.isEmpty(queryString)){log.info("<========================= Get String ========================>"); log.info(queryString); } log.info("<========================= Request Param ===========================>"); Enumeration<?> eq = request.getParameterNames(); while (eq.hasMoreElements()) { String name = (String) eq.nextElement(); String value = request.getParameter(name); log.info(name + " = " + value); }log.info("<========================= Request Param ===========================>"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } } /** * Revision history * ------------------------------------------------------------------------- * * Date Author Note * ------------------------------------------------------------------------- */
上述是日志的配置情况,下面介绍aop切入日志的的方法@Target({ ElementType.PARAMETER, ElementType.METHOD })@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface SystemControllerLog { String description() default ""; } @RequestMapping(value = "/htgl/addNewRecruitment", method = RequestMethod.POST) @SystemControllerLog(description="登出") public SunrealResult addNewRecruitment(@RequestBody RecruitmentInformation recruitmentInformation) { System.out.println("进入Sysmaintain--provider--addNewRecruitment"); try { return recruitmentInformationService.addNewRecruitment(recruitmentInformation); } catch (Exception e) { e.printStackTrace(); return SunrealResultUtil.error(-1, "接口服务异常,请重新尝试!"); } }@Component //交予容器管理@Aspect //代理public class LoggerBefore { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(LoggerBefore.class); /** * OperateLogService */ @Autowired private SysuserOperatehistoryMapper logService; @Pointcut("@annotation(com.sunreal.sysmaintain_provider.util.SystemControllerLog)") public void controllerAspect() { } @SuppressWarnings("rawtypes") public static String getControllerMethodDescription(JoinPoint joinPoint) throws Exception { String targetName = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); Object[] arguments = joinPoint.getArgs(); Class targetClass = Class.forName(targetName); Method[] methods = targetClass.getMethods(); String description = ""; for (Method method : methods) { if (method.getName().equals(methodName)) { Class[] clazzs = method.getParameterTypes(); if (clazzs.length == arguments.length) { description = method.getAnnotation(SystemControllerLog.class).description(); break; } } } return description; } /** * @param * @throws Throwable */ @After("controllerAspect()") public void before(JoinPoint joinPoint) throws Throwable {// EnterpriseOperator curUser = null;// String userIp = null;// String sessionId = null; String clazzName = joinPoint.getTarget().getClass().getName(); String methodName = joinPoint.getSignature().getName(); Object[] objects = joinPoint.getArgs(); Class targetClass = Class.forName(clazzName); Method[] methods = targetClass.getMethods(); String description = ""; for (Method method : methods) { if (method.getName().equals(methodName)) { Class[] clazzs = method.getParameterTypes(); if (clazzs.length == objects.length) { description = method.getAnnotation(SystemControllerLog.class).description(); break; } } } logger.info("clazzName=" + clazzName + ",method=" + methodName + ",args=" + objects);// Subject subject = SecurityUtils.getSubject();// userIp=subject.getSession().getHost();// sessionId=subject.getSession().getId().toString();// Object user = subject.getPrincipal();// logger.info(user);// if (user instanceof EnterpriseOperator) {// curUser = (EnterpriseOperator) user;// OperateLog log = new OperateLog();// log.setUserId(String.valueOf(curUser.getId()));// log.setUserName(curUser.getUsername());// log.setOperateTime(new Date());// log.setClassName(clazzName);// log.setOperateMethod(methodName);// log.setUserIp(userIp);// log.setSessionId(sessionId);// log.setOperateCnName(description);// logService.addLog(log);// } Operateinfo operateinfo = new Operateinfo(); operateinfo.setOperatedate(new Date()); operateinfo.setOperateuserid(12212321); operateinfo.setOperatedetail(methodName); long logId = new IdWorker(1,1).nextId(); operateinfo.setOperateId(logId); logService.insertLog(operateinfo); }}
@SpringBootApplication//重点@ServletComponentScanpublic class DemoApplication {
转载于:https://www.cnblogs.com/gyadmin/p/9198259.html
spring boot的gradle整合日志相关推荐
- [Spring Boot]Druid datasource整合及配置
[Spring Boot]Druid datasource整合及配置 创建Spring Boot项目 这里使用默认配置创建一个空项目 demo-druid 用作演示,可跳过这一段: 只勾选基本的Spr ...
- Spring Boot 2.x整合Quartz
宣传官网 xb.exrick.cn 在线Demo xboot.exrick.cn 开源版Github地址 github.com/Exrick/x-bo- 开发文档 www.kancloud.cn/ex ...
- java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...
java相关:Spring Boot 把配置文件和日志文件放到jar外部 发布于 2020-3-6| 复制链接 如果不想使用默认的application.properties,而想将属性文件放到jar ...
- spring boot使用Jedis整合Redis
文章目录 spring boot使用jedis整合redis 总结 Spring Boot整合Redis有两种方式,分别是Jedis和RedisTemplate,那么它们二者有什么区别呢? 1.Jed ...
- SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...
- spring日志报错提醒_Spring Boot 2.x : 整合日志框架 Log4j2
日志框架概述 在一个 web 项目建设中,如果说第一件事是 Spring 框架的搭建,那么第二件事就是日志框架的搭建,线上 web 项目的日志可能是我们了解项目运行的唯一方式. 常用日志框架 java ...
- Spring Boot 在Gradle构建中使用Log4j日志
2019独角兽企业重金招聘Python工程师标准>>> 在使用Spring Boot的时候,想更换默认的日志组件,一直使用的是Log4j,在build.gradle配置里加入下面代码 ...
- Spring Boot 2.X整合Spring-cache,让你的网站速度飞起来
计算机领域有人说过一句名言:"计算机科学领域的任何问题都可以通过增加一个中间层来解决",今天我们就用Spring-cache给网站添加一层缓存,让你的网站速度飞起来. 本文目录 一 ...
- Spring Boot定时任务-SpringBoot整合Quartz
如何通过SpringBoot整合Quartz框架,我们首先去创建一个项目,接下来我们需要在pom文件里添加坐标,我们在使用SpringBoot整合Quartz的时候,需要添加哪些坐标呢,我们来看一下, ...
最新文章
- pure abstract class(什么是纯抽象类?)
- codeforces 665B Shopping
- 编写高质量的代码--基础:结构和样式,行为的分离
- java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
- 云计算与虚拟化了解二三事
- 中国金融家俱乐部秋季论坛聚焦“自贸区将带来什么”展开论道
- ssis 派生列_SSIS脚本组件与派生列
- brighthouse mysql_MySQL 数据库中的数据页合并-爱可生
- 关于BIO和NIO的理解
- 看JAVA是J2EE_J2EE学习路线图
- Mcafee(麦咖啡)8.5i 使用设置图解
- JRE和JDK的区别是什么?
- Pandas时间序列数据操作
- 华为 服务器 驱动 linux,华为服务器SAS控制器驱动问题
- 线程安全、乐观锁和悲观锁那点事
- HR面试问题-离职原因
- Docker离线安装及python算法部署详细介绍
- java计数器map_计数器(Counter)
- 本程序实现求n*m的二维数组元素的最大值,请将程序补充完整,以实现规定功能
- linux管理光标显示与否
热门文章
- 夜上海音乐播放器 v 1.0
- 美封锁对华半导体出口:14nm制造可以 X86设计不行
- systemd 与 sysVinit 彩版对照表
- 转 JMeter之修改Sampler响应数据的编码格式
- 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),...
- Xml之Linq遍历
- Python字符集编码和文件读写
- 黑加仑妞 使用vue+flask做全栈开发的全过程(实现前后端分离)
- org.apache.catalina.loader.StandardClassLoader@1af33d6
- perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除