Spring -- 日志
来源:互联网 发布:php 类与对象的关系 编辑:程序博客网 时间:2024/05/16 14:52
日志
日志对于Spring是一个非常重要的依赖,因为:
- 它是一个强制的外部依赖
- 所有人都想看到它们使用的工具的输出是什么。
Spring集成了很多其他工具,这些工具也有日志的依赖。这样就可以统一日志系统了。
Spring中强制的日志依赖是JCL (Jakata Commons Logging API),JCL的对象
log
在Spring中是可见的。最好所有版本都使用同一个日志库,这样迁移时就比较方便,因为是向后兼容的。显式地依赖commons-logging
就行。
不使用commons-logging
有两种方式用于切换commons-logging
:
- 去除
spring-core
模块的依赖,因为它是唯一一个显式地依赖commons-logging
的模块。 - 用一个空的jar替换
commons-logging
的依赖。(具体参考SLF4J FAQ)
去除commons-logging,把下面的内容添加到dependencyManagement
:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.M3</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency></dependencies>
现在程序可能挂了,因为classpath中没有 JCL API 的实现,所以需要用新的来替换它,比如 SLF4J。
SLF4J
SLF4J 比 commons-logging
要更高效,更干净。
通用的做法是桥接 Spring 到 SFJ4J,然后提供显式的从 SLF4J 到 Log4J 的绑定,需要提供4个依赖(并且去除commons-loggings
):桥, SLF4J API,到 Log4J 的绑定, Log4J 自身的实现:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.M3</version> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.8</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency></dependencies>
使用 Log4J
很多人使用 Log4J 做为日志框架,方法是:把 Log4J 放进 classpath,提供一个配置文件(log4j.properties
或log4j.xml
),然后这样写Maven配置:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.0.0.M3</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency></dependencies>
还有一些log4j.properties的配置:
log4j.rootCategory=INFO, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%nlog4j.category.org.springframework.beans.factory=DEBUG
带有Native JCL 的容器
有些容器自身就有 JCL的实现,比如 IBM 的 Websphere Application WAS。这经常会引起问题,而且不幸运地是,没有很好的解决方案,简单地去除去 commons-logging
的依赖在多数情况下还不够。
这种 WAS 的情况下,最简单的事情就是反转 “class loader hierarchy”(IBM叫做parent last),这样一来就是应用控制 JCL 依赖,而不是容器控制。这个选项并不是一直打开的,但是也没有其他建议了,所以具体要看容器的功能和版本了。
- spring日志
- Spring -- 日志
- Spring AOP处理日志
- Spring AOP处理日志
- Spring错误日志
- 如何过滤Spring日志
- 配置spring日志记录
- Spring AOP处理日志
- Spring Aop 日志管理
- spring aop 日志记录
- Spring AOP记录日志!
- Spring切面管理日志
- Spring AOP记录日志! .
- spring log日志
- Spring AOP 日志管理
- spring配置日志
- spring 日志工具
- spring aop记录日志
- 一遍记住Java常用的八种排序算法与代码实现
- Thread 与 Runnable 线程 初识
- 整理
- dot” not found in path
- 简述android的五大组件
- Spring -- 日志
- OPNET学习小结(1)
- Java 异常处理问题实例(1)
- c语言练习之删除重复子串
- c++的类/对象
- linux进程的堆栈
- android忠告
- STL中栈和队列的基本操作
- 我的Linux程序,开发环境搭建