>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20339 个阅读者 刷新本主题
 * 贴子主题:  Spring配置日志 回复文章 点赞(0)  收藏  
作者:javathinker    发表时间:2020-03-08 19:19:21     消息  查看  搜索  好友  复制  引用

                                                                                                

spring配置日志

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

方案一:commons-logging+Log4J

1.依赖:                  

  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的一个例子:                          

log4j.rootCategory=WARN, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d {ABSOLUTE} %5p %t %c {2}:%L - %m%n

log4j.category.org.exam=DEBUG
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文件内容应改为                  

log4j.rootLogger=WARN, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d {ABSOLUTE} %5p %t %c {2}:%L - %m%n

log4j.logger.org.exam=DEBUG
log4j.logger.org.springframework.beans.factory=INFO

                   3.代码用法:                              

  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.  

  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.代码用法:

  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.                      

  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例子

  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.代码用法:同方案二一样

                                                                                                                      
----------------------------
原文链接:https://blog.csdn.net/xiejx618/article/details/41698913

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-03-10 12:25:25 重新编辑]
  Java面向对象编程-->输入与输出(下)
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->Java反射机制
  精通Spring-->Vue Router路由管理器
  Vue3开发-->计算属性和数据监听
  Netty的粘包和拆包问题分析
  使用IntelliJ IDEA开发Maven HelloWorld
  卫琴姐姐制作的最新视频课程:基于Spring的JavaWeb开发技术详...
  Spring MVC服务器端推送的两种方式
  HandlerInterceptor与WebRequestInterceptor的异同
  Spring MVC国际化
  @SessionAttributes的用法
  微服务拆分实践
  理解 RESTful 风格的 API
  Java软件架构设计七大原则
  Zabbix后端存储ES的优化实践
  一份Spring Boot核心知识清单
  Spring MVC Controller单例陷阱
  MyBatis解析和运行原理
  Hibernate拦截器与监听器
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。