• SpringBoot之日志记录-专题四


    SpringBoot之日志记录-专题四

    六、日志管理

    6.1使用log4j记录日志

    6.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
    
    

    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>
    

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

    6.2.1POM文件新增依赖
    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-aop</artifactId>
    	</dependency>
    
    6.2.2POM文件新增依赖
    @Aspect
    @Component
    public class WebLogAspect {
    
    	private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
    
    	@Pointcut("execution(public * com.example.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);
    	}
    }
    

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

    6.3.1 添加lombok依赖
    <dependency>
    	<groupId>org.projectlombok</groupId>
    	<artifactId>lombok</artifactId>
    </dependency>
    

    6.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("####我是日志##########");
    	}
    
    }
    

    6.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
    

    lombok插件请参考: http://bbs.itmayiedu.com/article/1527769518449

  • 相关阅读:
    jq 切换功能toggle
    打开控制台F12弹出弹窗
    CSS解决无空格太长的字母,数字不会自动换行的问题
    微信公众号页面无法唤起输入框
    别人遇到的两条前端面试题
    在HTML打开已安装的App,未安装跳转到对应的下载链接
    promise的使用
    特殊的json对象转数组,最合成新的json数据
    Rem兼容知多少?
    parseInt的结果看不懂,请看我分析
  • 原文地址:https://www.cnblogs.com/GitBoy/p/11093747.html
Copyright © 2020-2023  润新知