【Spring Boot学习之五】日志管理

环境
  eclipse 4.7
  jdk 1.8
  Spring Boot 1.5.2

一、log4j

常见方式:log4j.properties + org.apache.log4j.Logger
比如:
log4j.properties:

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=../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=../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=../logs/debug/api_services_debug

controller:

package com.wjy.controller;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.wjy.test1.service.UserServiceTest1;

@RestController
public class UserController {

    private static Logger log = Logger.getLogger(UserController.class);

    @Autowired
    public UserServiceTest1 userServiceTest1;

    @RequestMapping("/insertTest1ByService")
    public String insertTest1ByService(String name,Integer age) {
        log.info("insertTest1ByService:"+name+","+age);

        userServiceTest1.insertuser1(name, age);
        return "success";
    }

}

二、AOP 切面记录日志
1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、切面

package com.wjy.aop;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
@Component
public class WebLogAspect {
    private static Logger logger = Logger.getLogger(WebLogAspect.class);

    @Pointcut("execution(public * com.wjy.controller..*.*(..))")
    public void weblog() {
        //具体业务处理  比如报文入表等等
        //logger.info("weblog(.....)");
    }

    /**
     * @Description: 方法前处理
     */
    @Before("weblog()")
    public void doBefore(JoinPoint joinPoint) {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        logger.info("#####################请求开始####################");
        // 记录下请求内容
        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:{" + name + "},value:{" + request.getParameter(name) + "}");
        }
    }

    /**
     * @Description: 方法后处理
     */
    @AfterReturning(returning="ret",pointcut="weblog()")
    public void doAfterReturning(Object ret) {
        // 处理完请求,返回内容
        logger.info("RESPONSE : " + ret);
        logger.info("#####################请求结束####################");
    }
}

测试验证:http://localhost:8080/insertTest1ByService?name=wangsan&age=10

日志:

2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : #####################请求开始####################
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : URL : http://localhost:8080/insertTest1ByService
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : HTTP_METHOD : GET
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : IP : 0:0:0:0:0:0:0:1
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : name:{name},value:{wangsan}
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : name:{age},value:{10}
2019-07-23 18:24:16.490  INFO 2988 --- [nio-8080-exec-5] com.wjy.controller.UserController        : insertTest1ByService:wangsan,10
2019-07-23 18:24:16.572  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : RESPONSE : success
2019-07-23 18:24:16.572  INFO 2988 --- [nio-8080-exec-5] com.wjy.aop.WebLogAspect                 : #####################请求结束####################

原文地址:https://www.cnblogs.com/cac2020/p/11233637.html

时间: 2024-08-30 01:01:49

【Spring Boot学习之五】日志管理的相关文章

spring boot 学习之五(日志配置)

想直接看这里的我建议先看了我的spring boot 学习之四.因为日志的配置要用到properties. 先了解一下springBoot的日志系统然后再进行配置. springboot默认采用的是slf4j+logback.之前的web模块已经添加过了相关日志的依赖 private static final Logger logger = LoggerFactory.getLogger(LogConfig.class); 我们调用这个对象即可进行日志记录,日志记录默认是打印出来的,我们可以调用

Spring boot学习(六)Spring boot实现AOP记录操作日志

前言 在实际的项目中,特别是管理系统中,对于那些重要的操作我们通常都会记录操作日志.比如对数据库的CRUD操作,我们都会对每一次重要的操作进行记录,通常的做法是向数据库指定的日志表中插入一条记录.这里就产生了一个问题,难道要我们每次在 CRUD的时候都手动的插入日志记录吗?这肯定是不合适的,这样的操作无疑是加大了开发量,而且不易维护,所以实际项目中总是利用AOP(Aspect Oriented Programming)即面向切面编程这一技术来记录系统中的操作日志. 日志分类 这里我把日志按照面向

Spring Boot学习记录(一)--环境搭建

Spring Boot学习记录(一)–环境搭建 标签(空格分隔): spring-boot 最近趁着下班闲时间学习spring-boot,记录下学习历程,最后打算实战一个API管理平台,下面开始环境配置. 1.工程结构 使用maven建立一个普通结构,因为spring-boot内嵌tomcat,所以打包只需要打包成jar就可以直接运行,所以并不像以前那样建立WEB程序了,目录如下,类可以先建立好放在那: 2.引入maven依赖 根据官方教程提示,直接引入parent就可以使用spring-boo

Spring Boot学习记录(三)--整合Mybatis

Spring Boot学习记录(三)–整合Mybatis 标签(空格分隔): spring-boot 控制器,视图解析器前面两篇都已弄好,这一篇学习持久层框架整合. 1.数据源配置 数据源使用druid,maven引入相关依赖,包括spring-jdbc依赖,mysql依赖 1.转换问题 配置的过程要学会为什么这样配置,而不是只学会了配置.这里我们可以和以前的配置方式对比: 以前版本 <!--配置数据库连接池Druid--> <bean id="dataSource"

Spring Boot学习路线

Spring Boot 学习路线,本文计划根据作者近几年的工作.学习经验,来分析和制定一个学习使用 Spring Boot技术的步骤路线图. 一.准备工作 俗话说:"工欲善其事必先利其器".特别是软件开发,这样一个重视工程实践的领域,一定要最先选择和熟悉一系列的开发环境工具. 首先推荐选用最新版本技术标准的开发工具,将如下的开发环境安装配置好. 开发环境: (1)JDK 1.8 (2)Eclipse Oxygen EE版本 或者也可以使用 IntelliJ IDEA (3)Tomcat

15 个优秀开源的 Spring Boot 学习项目

Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受欢迎程度可见一斑.经常有人问松哥有没有推荐的 Spring Boot 学习资料?当然有!买松哥书就对了,哈哈. 有需要书籍<Spring Boot+Vue全栈开发实战>PDF版的同学,可以在公众号:Java知己,发送:全栈开发实战,获取该书籍. 除了书呢?当然就是开源项目了,今天松哥整理了几个优质

spring boot学习1

转:https://blog.csdn.net/jsyxcjw/article/details/46763639 1 开始 1.1 spring介绍 Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run". 我们为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始.多数Spring Boot应用需要很少的Spring配置. 你可以使用Spring Boot创建Java应用,并使用java -jar启动它或采用传

Spring Boot学习大全(入门)

Spring Boot学习(入门) 1.了解Spring boot Spring boot的官网(https://spring.io),我们需要的一些jar包,配置文件都可以在下载.添置书签后,我自己常常来看看spring boot这老兄,以及后面所需要的Spring Cloud.Spring Cloud Data Flow. 2.Spring Boot的简介 随着动态语言的流行( Ruby, Groovy, Scala, Node. js)Java的开发显得格外的笨重,繁多的配置,低下的开发效

Linux学习之日志管理(二十一)

Linux学习之日志管理 目录 日志管理 日志服务 rsyslogd的新特点 启动日志服务 常见日志的作用 日志文件的一般格式 rsyslogd日志服务 /etc/rsyslog.conf配置文件 服务名称 连接符号 日志等级 日志记录位置 日志轮替 日志文件命名 logrotate配置文件 logrotate命令 日志管理 日志服务 在Centos6.x中日志服务已经由rsyslogd取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件