1.什么是日志功能
在项目中关键位置输出日志信息,日志信息不能通过System.out.println()输出到控制台(因为生产环境没有控制台)
需要将日志信息输出到一个固定的文件中,这样就可以长久保存
2.常用的日志组件
slf4j
commins-logging
log4j
log4j2
logback
jdkback
jdk loging
日志组件封装从程序向指定文件输出日志信息功能
springboot选择的是slf4j(上层定义)+logback(具体实现)组合
3.集成并使用日志组件
1.项目中集成日志组件(.yml文件)
logging:
level:
com.demo.demoms: debug #日志级别 debug<info<warn<error 日志文件,会而每天自动备份一下
2.项目中如何使用日志
static Logger logger = LoggerFactory.getLogger(LoginController.class); //获得日志对象
logger.debug("debug用户信息"+admin);
logger.info("info用户信息"+admin);
logger.warn("warn用户信息"+admin);
logger.error("error用户信息"+admin);
使用AOP进行日志打印
package com.ffyc.bookms.common;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
/*
AOP日志统一打印实现
*/
@Component
@Aspect
public class LogAspect {
//获取日志对象
private Logger logger = LoggerFactory.getLogger(getClass());
//通配符,定义规则,那些方法可以被我的切面切到,这里的意思是不限返回值和方法和参数
//定义切入点
@Pointcut("execution(public * com.ffyc.bookms.controller..*.*(..))")
public void webLog(){
}
@Before("webLog()")
public void log(JoinPoint joinPoint){
ServletRequestAttributes attributes = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
logger.info("URL : {}", request.getRequestURL().toString());
logger.info("HTTP_METHOD :{} ", request.getMethod());
logger.info("IP : {}", request.getRemoteAddr());
Enumeration<String> headers = request.getHeaderNames();
while (headers.hasMoreElements()){
String hearName = headers.nextElement();
logger.info("name:{},value:{}",hearName,request.getHeader(hearName));
}
//获取所有请求参数
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = (String) enu.nextElement();
logger.info("name:{},value:{}", name, request.getParameter(name));
}
}
}