• spring配置日志


    只需六步,即可在IDEA的SpringMVC框架中使用slf4j-logback来打印log日志。

     

    第一步:

      你需要有一个SpringMVC项目,IDEA自己生成的HelloWorld就可以。另外服务器我用的是Tomcat。

    第二步:

      在pom.xml中添加如下依赖,IDEA会自动进行下载。

      其中,第一个logback-classic包含了基本的jar包,第二个logback-ext-spring包含了LogbackConfigListener,稍后会配置,第三个jcl-over-slf4j的作用是可以看到Spring框架本身打印的日志。

    复制代码
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.3</version>
    </dependency>
    <dependency>
        <groupId>org.logback-extensions</groupId>
        <artifactId>logback-ext-spring</artifactId>
        <version>0.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.12</version>
    </dependency>
    复制代码

    第三步:

      新建一个logback.xml,放到resources路径下。其中“com.springapp.mvc”需要换成你自己的java文件所在的包路径。

      后面的level是日志显示等级,DEBUG等级最低,可以显示所有level的日志,WARN等级居中,可以显示WARN及其以上level的日志,ERROR等级最高,只能显示ERROR这个level的日志。所以一般用DEBUG就行。

      level等级顺序:error>warn>info>debug。

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- For assistance related to logback-translator or configuration  -->
    <!-- files in general, please contact the logback user mailing list -->
    <!-- at http://www.qos.ch/mailman/listinfo/logback-user             -->
    <!--                                                                -->
    <!-- For professional support please see                            -->
    <!--    http://www.qos.ch/shop/products/professionalSupport         -->
    <!--                                                                -->
    <configuration>
      <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <Encoding>UTF-8</Encoding>
        <encoder>
          <pattern>%d{HH:mm:ss.SSS} %5p [%t] [%c{1}]:%L - %m%n</pattern>
        </encoder>
      </appender>
      <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
        <!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
        <!--for further documentation-->
        <Encoding>UTF-8</Encoding>
        <encoder>
          <pattern>%d %p [%t] [%c]:%L - %m%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
          <level>DEBUG</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>log/%d{yyyy-MM-dd-HH'.log'}</fileNamePattern>
        </rollingPolicy>
      </appender>
      <logger name="org.springframework" level="WARN"/>
      <logger name="org.springframework.remoting" level="WARN"/>
      <logger name="org.springframework.scheduling.quartz" level="WARN"/>
      <logger name="org.springframework.data.jpa" level="DEBUG"/>
      <logger name="org.cometd" level="WARN"/>
      <logger name="ch.qos.logback" level="WARN"/>
      <logger name="com.springapp.mvc" level="DEBUG"/>
    
      <root level="ERROR">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logfile"/>
      </root>
    </configuration>
    复制代码

      

    第四步:在web.xml中进行如下配置,包括logback.xml的位置和前面提到的Listener。

    复制代码
    <context-param>
        <param-name>logbackConfigLocation</param-name>
        <param-value>classpath:/logback.xml</param-value>
    </context-param>
    <listener>
        <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
    </listener>
    复制代码

    第五步:在java代码中加入log相关代码,注意以下几点:

      1.此处log调用error方法表明此日志等级为ERROR,显示等级最高,即前面配置DEBUG和ERROR的包都可以显示此日志。

      2.“int a = 1/0;”是为了测试显示异常日志用。

      3.StringWriter和PrintWriter的使用是为了完整显示出异常的详细日志,不是必需的。

    复制代码
    /**
     * Main
     *
     * @author 徐飞
     * @version 2016/06/22 09:30
     */
    @Controller
    @RequestMapping("/")
    public class MainController {
    
        private Logger log = LoggerFactory.getLogger(MainController.class);
    
        @RequestMapping(method = RequestMethod.GET)
        public String printWelcome(ModelMap model) {
            try {
                int a = 1/0;
            }catch (Exception e){
                StringWriter sw = new StringWriter();
                PrintWriter pw = new PrintWriter(sw);
                e.printStackTrace(pw);
                log.error("Main错误:" + sw.toString());
            }
            model.addAttribute("message", "Hello world!");
            return "index";
        }
    }
    复制代码

    第六步:也是最后一步,运行程序,然后打开项目所用Tomcat中的log文件夹,即可看到打印出来的详细日志“/ by zero”。

      

    参考:http://spring.io/blog/2009/12/04/logging-dependencies-in-spring


    spring默认使用了commons-logging,在集成其它日志框架,slf4j使用了编译时绑定来代替运行时发现.它注定是更高效的(当然slf4j还可以使用占位符绑定等功能).下文介绍spring三种常用方案记录日志,推荐第三种
    方案一:commons-logging+Log4J

    1.依赖:

     

    [html] view plain copy
     
    1. <dependency>  
    2.     <groupId>org.springframework</groupId>  
    3.     <artifactId>spring-context</artifactId>  
    4.     <version>${spring.version}</version>  
    5. </dependency>  
    6. <dependency>  
    7.     <groupId>log4j</groupId>  
    8.     <artifactId>log4j</artifactId>  
    9.     <version>1.2.17</version>  
    10. </dependency>  

    2.在classpath根目录添加log4j.properties或log4j.xml,关于开发的日志级别配置,调得太高,会漏到一些信息看不见,调得太低,输出得太多,看得眼花缭乱,在产品阶段甚至影响应用性能.我觉得开发时,默认(一般依赖也是用默认appender)给WARN,项目本身编写的代码可以给DEBUG,其它另外特别指定,以下是log4j.properties的一个例子:

     

     

    [plain] view plain copy
     
    1. log4j.rootCategory=WARN, stdout  
    2.   
    3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n  
    6.   
    7. log4j.category.org.exam=DEBUG  
    8. log4j.category.org.springframework.beans.factory=INFO  

    根据log4j API(http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html),Category已经过时,应使用Logger代替.而Logger是Category的子类,在Category的所有操作都可以在Logger上执行.以上的properties文件内容应改为

     

    [plain] view plain copy
     
    1. log4j.rootLogger=WARN, stdout  
    2.   
    3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n  
    6.   
    7. log4j.logger.org.exam=DEBUG  
    8. log4j.logger.org.springframework.beans.factory=INFO  

     

    3.代码用法:

     

     

    [java] view plain copy
     
    1. import org.apache.log4j.Logger;  
    2. public class UserService {  
    3.     final Logger logger = Logger.getLogger(UserService.class);  
    4.     public boolean save(){  
    5.         logger.error("虽然A喜欢我,但是我喜欢B");  
    6.         return true;  
    7.     }  
    8. }  

    方案二:slf4j+Log4J
    1.先在spring排除commons-logging.再引入4个包:桥接包jcl-over-slf4j,SLF4J API包slf4j-api,绑定到Log4J的包slf4j-log4j12,Log4J实现包log4j12. 

    [html] view plain copy
     
    1. <dependency>  
    2.     <groupId>org.slf4j</groupId>  
    3.     <artifactId>jcl-over-slf4j</artifactId>  
    4.     <version>1.7.7</version>  
    5. </dependency>  
    6. <dependency>  
    7.     <groupId>org.slf4j</groupId>  
    8.     <artifactId>slf4j-log4j12</artifactId>  
    9.     <version>1.7.7</version>  
    10. </dependency>  
    11. <dependency>  
    12.     <groupId>org.springframework</groupId>  
    13.     <artifactId>spring-context</artifactId>  
    14.     <version>${spring.version}</version>  
    15.     <exclusions>  
    16.         <exclusion>  
    17.             <groupId>commons-logging</groupId>  
    18.             <artifactId>commons-logging</artifactId>  
    19.         </exclusion>  
    20.     </exclusions>  
    21. </dependency>  

    2.log4j配置同上.
    3.代码用法:

    [java] view plain copy
     
    1. import org.slf4j.Logger;  
    2. import org.slf4j.LoggerFactory;  
    3. public class UserService {  
    4.     final Logger logger = LoggerFactory.getLogger(UserService.class);  
    5.     public boolean save(){  
    6.         logger.error("虽然{}喜欢我,但是我喜欢{}","A","B");  
    7.         return true;  
    8.     }  
    9. }  

     

    方案三:slf4j+logback.其中,logback是slf4j原生的实现.

    1.先引入logback-classic依赖,它会将其它依赖引入,再在spring排除commons-logging.

     

    [html] view plain copy
     
    1. <dependency>  
    2.     <groupId>ch.qos.logback</groupId>  
    3.     <artifactId>logback-classic</artifactId>  
    4.     <version>1.1.3</version>  
    5. </dependency>  
    6. <dependency>  
    7.     <groupId>org.springframework</groupId>  
    8.     <artifactId>spring-webmvc</artifactId>  
    9.     <version>${spring.version}</version>  
    10.     <exclusions>  
    11.         <exclusion>  
    12.             <groupId>commons-logging</groupId>  
    13.             <artifactId>commons-logging</artifactId>  
    14.         </exclusion>  
    15.     </exclusions>  
    16. </dependency>  

    2.logback配置:查找顺序logback.groovy-->logback-test.xml-->logback.xml,详细配置还是参考文档http://logback.qos.ch/documentation.html.下面是logback.xml例子

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <configuration>  
    3.     <appender name="console" class="ch.qos.logback.core.ConsoleAppender">  
    4.         <encoder>  
    5.             <pattern>%d{yy.MM.dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>  
    6.         </encoder>  
    7.     </appender>  
    8.     <logger name="org.exam" level="debug" />  
    9.     <logger name="org.springframework.beans.factory" level="info" />  
    10.     <root level="warn">  
    11.         <appender-ref ref="console"/>  
    12.     </root>  
    13. </configuration>  

    3.代码用法:同方案二一样

  • 相关阅读:
    navicat的快捷键
    NoSQL Redis的学习笔记
    awk的使用
    把自己的电脑做服务器发布tomcat的项目外网访问
    linux系统备份
    系统自动化配置和管理工具:SaltStack
    RSync实现文件备份同步
    传送文件
    面试题
    闭包closure
  • 原文地址:https://www.cnblogs.com/imqsl/p/7768323.html
Copyright © 2020-2023  润新知