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整合日志相关推荐

  1. [Spring Boot]Druid datasource整合及配置

    [Spring Boot]Druid datasource整合及配置 创建Spring Boot项目 这里使用默认配置创建一个空项目 demo-druid 用作演示,可跳过这一段: 只勾选基本的Spr ...

  2. Spring Boot 2.x整合Quartz

    宣传官网 xb.exrick.cn 在线Demo xboot.exrick.cn 开源版Github地址 github.com/Exrick/x-bo- 开发文档 www.kancloud.cn/ex ...

  3. java配置文件放置到jar外_java相关:Spring Boot 把配置文件和日志文件放到jar外部...

    java相关:Spring Boot 把配置文件和日志文件放到jar外部 发布于 2020-3-6| 复制链接 如果不想使用默认的application.properties,而想将属性文件放到jar ...

  4. spring boot使用Jedis整合Redis

    文章目录 spring boot使用jedis整合redis 总结 Spring Boot整合Redis有两种方式,分别是Jedis和RedisTemplate,那么它们二者有什么区别呢? 1.Jed ...

  5. SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性 ...

  6. spring日志报错提醒_Spring Boot 2.x : 整合日志框架 Log4j2

    日志框架概述 在一个 web 项目建设中,如果说第一件事是 Spring 框架的搭建,那么第二件事就是日志框架的搭建,线上 web 项目的日志可能是我们了解项目运行的唯一方式. 常用日志框架 java ...

  7. Spring Boot 在Gradle构建中使用Log4j日志

    2019独角兽企业重金招聘Python工程师标准>>> 在使用Spring Boot的时候,想更换默认的日志组件,一直使用的是Log4j,在build.gradle配置里加入下面代码 ...

  8. Spring Boot 2.X整合Spring-cache,让你的网站速度飞起来

    计算机领域有人说过一句名言:"计算机科学领域的任何问题都可以通过增加一个中间层来解决",今天我们就用Spring-cache给网站添加一层缓存,让你的网站速度飞起来. 本文目录 一 ...

  9. Spring Boot定时任务-SpringBoot整合Quartz

    如何通过SpringBoot整合Quartz框架,我们首先去创建一个项目,接下来我们需要在pom文件里添加坐标,我们在使用SpringBoot整合Quartz的时候,需要添加哪些坐标呢,我们来看一下, ...

最新文章

  1. pure abstract class(什么是纯抽象类?)
  2. codeforces 665B Shopping
  3. 编写高质量的代码--基础:结构和样式,行为的分离
  4. java创建两个foo方法_Java类实例化原理 - osc_foo7glsg的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 云计算与虚拟化了解二三事
  6. 中国金融家俱乐部秋季论坛聚焦“自贸区将带来什么”展开论道
  7. ssis 派生列_SSIS脚本组件与派生列
  8. brighthouse mysql_MySQL 数据库中的数据页合并-爱可生
  9. 关于BIO和NIO的理解
  10. 看JAVA是J2EE_J2EE学习路线图
  11. Mcafee(麦咖啡)8.5i 使用设置图解
  12. JRE和JDK的区别是什么?
  13. Pandas时间序列数据操作
  14. 华为 服务器 驱动 linux,华为服务器SAS控制器驱动问题
  15. 线程安全、乐观锁和悲观锁那点事
  16. HR面试问题-离职原因
  17. Docker离线安装及python算法部署详细介绍
  18. java计数器map_计数器(Counter)
  19. 本程序实现求n*m的二维数组元素的最大值,请将程序补充完整,以实现规定功能
  20. linux管理光标显示与否

热门文章

  1. 夜上海音乐播放器 v 1.0
  2. 美封锁对华半导体出口:14nm制造可以 X86设计不行
  3. systemd 与 sysVinit 彩版对照表
  4. 转 JMeter之修改Sampler响应数据的编码格式
  5. 当post 的字段很多,post的字段并不完全修改(有的值是前端input的值,有的任保留原来原来数据库的值),...
  6. Xml之Linq遍历
  7. Python字符集编码和文件读写
  8. 黑加仑妞 使用vue+flask做全栈开发的全过程(实现前后端分离)
  9. org.apache.catalina.loader.StandardClassLoader@1af33d6
  10. perl如何遍历指定文件夹下的指定扩展名文件,并按时间顺序要求删除