SpringBoot整合日志管理

1.1使用log4j记录日志

1.1.2新建log4j配置文件

文件名称log4j.properties

#log4j.rootLogger=CONSOLE,info,error,DEBUG

log4j.rootLogger=info,error,CONSOLE,DEBUG

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender    

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout    

log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n    

log4j.logger.info=info

log4j.appender.info=org.apache.log4j.DailyRollingFileAppender

log4j.appender.info.layout=org.apache.log4j.PatternLayout    

log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 

log4j.appender.info.datePattern='.'yyyy-MM-dd

log4j.appender.info.Threshold = info  

log4j.appender.info.append=true  

#log4j.appender.info.File=/home/admin/pms-api-services/logs/info/api_services_info

log4j.appender.info.File=/Users/dddd/Documents/testspace/pms-api-services/logs/info/api_services_info

log4j.logger.error=error 

log4j.appender.error=org.apache.log4j.DailyRollingFileAppender

log4j.appender.error.layout=org.apache.log4j.PatternLayout    

log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 

log4j.appender.error.datePattern='.'yyyy-MM-dd

log4j.appender.error.Threshold = error  

log4j.appender.error.append=true  

#log4j.appender.error.File=/home/admin/pms-api-services/logs/error/api_services_error

log4j.appender.error.File=/Users/dddd/Documents/testspace/pms-api-services/logs/error/api_services_error

log4j.logger.DEBUG=DEBUG

log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender

log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout    

log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n 

log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd

log4j.appender.DEBUG.Threshold = DEBUG  

log4j.appender.DEBUG.append=true  

#log4j.appender.DEBUG.File=/home/admin/pms-api-services/logs/debug/api_services_debug

log4j.appender.DEBUG.File=/Users/dddd/Documents/testspace/pms-api-services/logs/debug/api_services_debug

 

log4j代码

private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

 

Maven依赖

<parent>

                  <groupId>org.springframework.boot</groupId>

                  <artifactId>spring-boot-starter-parent</artifactId>

                  <version>2.0.0.RELEASE</version>

         </parent>

         <dependencies>

                  <!-- SpringBoot 核心组件 -->

                  <dependency>

                          <groupId>org.springframework.boot</groupId>

                          <artifactId>spring-boot-starter-web</artifactId>

                  </dependency>

                  <dependency>

                          <groupId>org.springframework.boot</groupId>

                          <artifactId>spring-boot-starter-tomcat</artifactId>

                  </dependency>

                  <dependency>

                          <groupId>org.apache.tomcat.embed</groupId>

                          <artifactId>tomcat-embed-jasper</artifactId>

                  </dependency>

                  <!-- spring boot start -->

                  <dependency>

                          <groupId>org.springframework.boot</groupId>

                          <artifactId>spring-boot-starter</artifactId>

                          <exclusions>

                                   <!-- 排除自带的logback依赖 -->

                                   <exclusion>

                                            <groupId>org.springframework.boot</groupId>

                                            <artifactId>spring-boot-starter-logging</artifactId>

                                   </exclusion>

                          </exclusions>

                  </dependency>

 

                  <!-- springboot-log4j -->

                  <dependency>

                          <groupId>org.springframework.boot</groupId>

                          <artifactId>spring-boot-starter-log4j</artifactId>

                          <version>1.3.8.RELEASE</version>

                  </dependency>

         </dependencies>

 

1.2使用AOP统一处理Web请求日志

1.2.1POM文件新增依赖

       <dependency>

                     <groupId>org.springframework.boot</groupId>

                     <artifactId>spring-boot-starter-aop</artifactId>

       </dependency>

 

1.2.2POM文件新增依赖

@Aspect

@Component

public class WebLogAspect {

 

         private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);

 

         @Pointcut("execution(public * com.itmayiedu.controller.*.*(..))")

         public void webLog() {

         }

 

         @Before("webLog()")

         public void doBefore(JoinPoint joinPoint) throws Throwable {

                  // 接收到请求,记录请求内容

                  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> enu = request.getParameterNames();

                  while (enu.hasMoreElements()) {

                          String name = (String) enu.nextElement();

                          logger.info("name:{},value:{}", name, request.getParameter(name));

                  }

         }

 

         @AfterReturning(returning = "ret", pointcut = "webLog()")

         public void doAfterReturning(Object ret) throws Throwable {

                  // 处理完请求,返回内容

                  logger.info("RESPONSE : " + ret);

         }

}

 

1.3Spring Boot集成lombok让代码更简洁

1.3.1添加lombok依赖

<dependency>

         <groupId>org.projectlombok</groupId>

         <artifactId>lombok</artifactId>

</dependency>

 

1.3.2实体类演示

@Slf4j

@Data

public class UserEntity {

         // @Getter

         // @Setter

         private String userName;

         // @Getter

         // @Setter

         private Integer age;

 

         @Override

         public String toString() {

                  return "UserEntity [userName=" + userName + ", age=" + age + "]";

         }

 

         public static void main(String[] args) {

                  UserEntity userEntity = new UserEntity();

                  userEntity.setUserName("zhangsan");

                  userEntity.setAge(20);

                  System.out.println(userEntity.toString());

                  log.info("####我是日志##########");

         }

 

}

 

1.3.2其他特性

@Data 标签,生成getter/setter toString()等方法

@NonNull : 让你不在担忧并且爱上NullPointerException

@CleanUp : 自动资源管理:不用再在finally中添加资源的close方法

@Setter/@Getter : 自动生成set和get方法

@ToString : 自动生成toString方法

@EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现

@NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor

自动生成构造方法

@Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法

@Value : 用于注解final类

@Builder : 产生复杂的构建器api类

@SneakyThrows : 异常处理(谨慎使用)

@Synchronized : 同步方法安全的转化

@Getter(lazy=true) :

@Log : 支持各种logger对象,使用时用对应的注解,如:@Log4

按照插件请参考:www.atguigu.com