Spring mvc 集成logback日志功能

一、概述

        这一篇中,我们将紧接着上一篇Spring mvc入门-登录例子,把日志功能集成进来。Java日志有好几种实现方式,例如commons-logging+log4j、slf4j+log4j、slf4j+logback等待。这里不对每一种进行介绍,我们使用最流行的slf4j+logback的组合方式。大家可以参考这篇java日志知识,以便对日志有个大致的了解。对于logback的各种配置详解可以参考这官方文档:https://logback.qos.ch/manual/configuration.html

二、操作步骤

1、添加pom依赖

 
    
      org.slf4j
      slf4j-api
      1.7.12
    
    
      ch.qos.logback
      logback-classic
      1.0.13
    
    
      org.codehaus.janino
      janino
      2.6.1
    
    
    
      org.projectlombok
      lombok
      1.12.4
    
  
最基础的两个jar是slf4j-api和logback-classic。其中slf4j-api是提供的日志接口,logback-classic提供的是接口实现。很多网上教程还添加了logback-core依赖,其实logback-classic已经包含了logback-core,如图所示:
如果在logback的配置文件里面要使用if 等表达式,那么还需要添加janino依赖。如果要使用@Slf4j的注解话,还需要添加lombok依赖。

2、编辑logback.xml配置文件

在resources目录下添加logback.xml配置文件:



	
	

	
	
		
			
				../log/${ServerName}/${AppName}.log
				
					../log/${ServerName}/${AppName}.log.%d{yyyy-MM-dd}
					7
				
				
					%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%.15thread] %logger{36}:%X{sysUser} - %.-4096msg%n
				
			

			
				
			
		
		
			
			
				
					%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%.15thread] %logger{36} - %.-4096msg%n
				
			

			
			
				../log/${ServerName}/${AppName}.log
				
					../log/${ServerName}/${AppName}.log.%d{yyyy-MM-dd}
					7
				
				
					%d{HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n
				
			

			
			
				
				
			
		
	
这是一个接近生产用的配置文件。根据不同的条件,将日志输出到不同的地方。如果tomcat启动时,定义了run_env环境变量,则将日志输出到滚动日志文件中,例如log/login-demo/login-demo.log。encoder定义了日志打印的格式,例如:
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%.15thread] %logger{36} - %.-4096msg%n
对应的一条日志信息:
2017-11-28 10:13:30.442 ERROR [bio-8080-exec-8] c.c.demo.controllers.LoginController - 用户名密码错误
大家可以参考着日志信息,去了解每个参数的意义。更详细的配置信息如Logger、appender、encoder、layout、filter请参考官方文档。

3、打印日志

package com.xxx.demo.controllers;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;

/**
 * Created by gameloft9 on 2017/11/27.
 */
@Slf4j
@Controller
public class LoginController {

    public static final String USER_NAME = "gameloft9";

    public static final String PWD = "123456";

    /**
     * 登录页面入口
     */
    @RequestMapping(value = "/index.do", method = RequestMethod.GET)
    public String index(Model model, HttpServletResponse response) {
        log.info("进入登录页面");
        return "login";
    }

    /**
     * 登录请求
     */
    @RequestMapping(value = "/login.do", method = RequestMethod.POST)
    public String login(Model model, String name, String pwd) {
        if (USER_NAME.equalsIgnoreCase(name) && PWD.equals(pwd)) {
            model.addAttribute("name", "name");
            return "home";
        }

        log.info("用户名密码错误,name:{},pwd:{}",name,pwd);
        model.addAttribute("errInfo", "用户名或密码错误!");
        return "login";
    }
}

在controller上面加上@Slf4j注解,然后就可以直接使用log打印日志了,例如log.info(),log.debug(),log.error()。

三、运行结果

Spring mvc 集成logback日志功能_第1张图片

下一篇将把数据库访问集成进来,敬请期待。

你可能感兴趣的:(Spring)