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. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
  5. log4j.category.org.exam=DEBUG
  6. 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. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  4. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
  5. log4j.logger.org.exam=DEBUG
  6. 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.代码用法:同方案二一样

时间: 2024-11-10 20:35:22

spring配置日志的相关文章

Spring Boot - Logback配置日志要考虑哪些因素

Spring Boot - Logback配置日志 出于性能等原因,Logback 目前是springboot应用日志的标配: 当然有时候在生产环境中也会考虑和三方中间件采用统一处理方式.@pdai Spring Boot - Logback配置日志 配置时考虑点 实现范例 综合范例 在配置前可以参考如下文章 參考文档 代码示例 最全的Java后端知识体系 https://www.pdai.tech, 每天更新中.... 配置时考虑点 支持日志路径,日志level等配置 日志控制配置通过appl

Spring Mvc 日志配置

第一步:pom.xml配置,导入需要的jar包 <!-- log4j日志文件管理包版本 --><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.9</log4j.version> <!-- 日志文件管理包 --><dependency>    <groupId>log4j</groupId>    <artifactId>log

spring 配置

SpringMVC配置 引入占位符<context:property-placeholder location="classpath:config.properties" /><util:properties id="properties" location="classpath:config.properties"/> <!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --&

spring配置log4j

1.配置基本的springMVC+hibernate环境.网上有很多这种例子. 2.需要使用log4j,首先就要在web.xml中配置log4j.方法有两种: 1.我们可以自己写一个servlet,服务器启动的时候自动加载,让该servlet加载log4j的配置文件(properties或者xml文件),这种方法百度百科讲log4j有详细说明. 2.加入spring自带的关于log4j的监听器.个人推荐使用第二种方法. 在web.xml文件中的配置为: <!-- Spring的log4j监听器*

四、spring boot 日志管理

spring boot日志默认采用logback进行输出,你可以对logback进行定制化,方法如下: 在resources文件夹下建立logback.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- base.xml in the spring-boot jar, --> <include resource="org/sprin

spring aop 日志 注解

前提:接上篇:spring aop 日志 一:无新增依赖包 二:修改切面类(aop.Log4jHandlerAOP.java) 三:修改applicationContext.xml 1:扫描注入容器新增aop(base-package="dao,service,aop") 2:支持AOP注解(<aop:aspectj-autoproxy/>) 3:去除传统AOP的配置以及切面类的注入 ps: 1:applicationContext.xml <?xml version

Spring Aop 日志拦截应用

近期,一个小伙伴遇到了此需求.要解决的问题就是: 记录用户在系统的操作,通过注解来灵活控制.  注解可以对方法进行修饰,描述.  后面会将注解上描述以及方法被调用时入参记录到数据库. 同时还需要对不同的操作进行分类(插入,修改,查看,下载/上传文件之类的),记录用户,时间以及IP,客户端User-agent . 我在这里将部分实现写了出来,实际在项目中可以直接参照进行修改就可以满足以上功能. 开发环境:W7 + Tomcat7 + jdk1.7 + Mysql5 框架:spring,spring

CXF spring配置引用标签

<!--java webservice CXF spring配置引用标签--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:jaxws=&

shiro整合spring配置

shiro应用到项目中,一般都是通过spring来管理.下面就如何把shiro整理到spring中进行了讲解,及给出了配置的步骤: 一.pom.xml文件配置 本例子主要是介绍maven管理的web项目进行配置介绍,因此,首先需建立好一个maven管理的web项目(可参考本博客创建maven管理的web项目). pom.xml文件配置,主要是添加相关依赖的jar支持.因为整合到spring中需添加spring支持.具体配置参考配置代码: 1 <project xmlns="http://m