`

log4j2在SpringMVC工程中的运用

阅读更多

        SpringMVC返回json数据的三种方式文件可知,我的SpringMVC工程已支持返回json数据,下面我们再给它增加日志输出功能。

一.引入日志相关的jar包


        不知为什么,经不是特别全面的验证,这七个jar包必须都引用到我的SpringMVC的工程中来。

 

二.增加log4j2.xml配置

<?xml version="1.0" encoding="UTF-8"?>  
  
<configuration status="error">  
    <!--先定义所有的appender-->  
    <appenders>  
        <!--这个输出控制台的配置-->  
        <Console name="Console" target="SYSTEM_OUT">  
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->  
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>  
            <!--这个都知道是输出日志的格式-->  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
        </Console>  
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->  
        <File name="log" fileName="log/test.log" append="false">  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>  
        </File>  
  
        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->  
        <RollingFile name="RollingFile" fileName="logs/app.log"  
                     filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">  
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>  
            <SizeBasedTriggeringPolicy size="20MB"/>  
        </RollingFile>  
    </appenders>  
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->  
    <loggers>
    	<logger name="com.bijian.study.controller" level="trace" additivity="false">
    		<appender-ref ref="RollingFile"/>
    		<appender-ref ref="log"/>  
            <appender-ref ref="Console"/>
    	</logger>
        <!--建立一个默认的root的logger-->  
        <root level="info">  
            <appender-ref ref="RollingFile"/>  
            <appender-ref ref="log"/>  
            <appender-ref ref="Console"/>  
        </root>  
    </loggers>
</configuration>

 

三.修改代码验证

HelloController.java

package com.bijian.study.controller;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.bijian.study.service.HelloService;

@Controller
public class HelloController {

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

    @Autowired
    private HelloService helloService;

    @RequestMapping("/greeting")
    public ModelAndView greeting(@RequestParam(value = "name", defaultValue = "World") String name) {

        Map<String, Object> map = new HashMap<String, Object>();
        try {
            //由于浏览器会把中文直接换成ISO-8859-1编码格式,如果用户在地址打入中文,需要进行如下转换处理
            String tempName = new String(name.getBytes("ISO-8859-1"), "utf-8");

            logger.trace("tempName:" + tempName);
            logger.info(tempName);

            String userName = helloService.processService(tempName);

            map.put("userName", userName);
            
            logger.trace("运行结果:" + map);
        } catch (UnsupportedEncodingException e) {
            logger.error("HelloController greeting方法发生UnsupportedEncodingException异常:" + e);
        } catch (Exception e) {
            logger.error("HelloController greeting方法发生Exception异常:" + e);
        }
        return new ModelAndView("/hello", map);
    }

    @ResponseBody
    @RequestMapping("/greet")
    public Map<String, Object> greet(HttpServletResponse response,
            @RequestParam(value = "name", defaultValue = "World") String name) {

        Map<String, Object> map = null;
        try {
            //由于浏览器会把中文直接换成ISO-8859-1编码格式,如果用户在地址打入中文,需要进行如下转换处理
            String tempName = new String(name.getBytes("ISO-8859-1"), "utf-8");
            
            logger.trace("tempName:" + tempName);
            logger.info(tempName);

            String userName = helloService.processService(tempName);

            map = new HashMap<String, Object>();
            map.put("userName", userName);
            
            logger.trace("运行结果:" + map);
        } catch (UnsupportedEncodingException e) {
            logger.error("HelloController greet方法发生UnsupportedEncodingException异常:" + e);
        } catch (Exception e) {
            logger.error("HelloController greet方法发生Exception异常:" + e);
        }
        return map;
    }
}

HelloService.java

package com.bijian.study.service;

public interface HelloService {

    public String processService(String name) throws Exception;
}

HelloServiceImpl.java

package com.bijian.study.service.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.bijian.study.service.HelloService;

@Service("helloService")
public class HelloServiceImpl implements HelloService {

    private static Logger logger = LoggerFactory.getLogger(HelloServiceImpl.class);
    
    @Override
    public String processService(String name) throws Exception {
        
        logger.info("HelloService processService name:" + name);
        return "Hello " + name;
    }
}

        启动Tomcat,浏览器中输入http://localhost:8080/SpringMVC/greet?name=lisi,运行结果如下:


        控制台输出:

16:08:34.120 TRACE com.bijian.study.controller.HelloController 62 greet - tempName:lisi
16:08:34.125 INFO  com.bijian.study.controller.HelloController 63 greet - lisi
16:08:34.125 INFO  com.bijian.study.service.impl.HelloServiceImpl 17 processService - HelloService processService name:lisi
16:08:34.126 TRACE com.bijian.study.controller.HelloController 70 greet - 运行结果:{userName=Hello lisi}

        app.log输出:

2016-06-26 at 16:08:34 CST TRACE com.bijian.study.controller.HelloController 62 greet - tempName:lisi
2016-06-26 at 16:08:34 CST INFO  com.bijian.study.controller.HelloController 63 greet - lisi
2016-06-26 at 16:08:34 CST INFO  com.bijian.study.service.impl.HelloServiceImpl 17 processService - HelloService processService name:lisi
2016-06-26 at 16:08:34 CST TRACE com.bijian.study.controller.HelloController 70 greet - 运行结果:{userName=Hello lisi}

 

        整个工程见附件《SpringMVC.zip》。

  • 大小: 14.3 KB
  • 大小: 7.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics