声明:这是转载的,内容根据网络整理而成。
1-slf4j
为什么使用slf4j
SLF4J(Simple logging facade for Java)
SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
sjf4j不是一个真正的日志实现,而是一个抽象层,它允许你在后台使用任意一个日志类库,相当于一个日志接口。
slf4j入口就是众多接口的集合,它不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在slf4j-api中。
总的来说,SLF4J使你的代码独立于任意一个特定的日志API,在代码中使用SLF4J写日志语句的主要出发点是使得你的程序独立于任意特定的日志类库。
调用过程
①首先系统包含slf4j-api作为日志接入的接口。compile时slf4j-api中public final class LoggerFactor类中private final static void bind()方法会寻找具体的日志实现类绑定,主要通过StaticLoggerBinder.getSingleton()的语句调用。
②slf4j-log4j12是链接slf4j-api和log4j中间的适配器。它实现了slf4j-apiz中StaticLoggerBinder接口,从而使得在编译时绑定的是slf4j-log4j12的getSingleton()方法。
③log4j是具体的日志系统。通过slf4j-log4j12初始化Log4j,达到最终日志的输出。
slffj引入log4j需要的jar包
- slf4j-api-1.6.1.jar
- log4j-1.2.16.jar
- slf4j-log4j12-1.6.1.jar
2-log4j和spring MVC配合
需要在web.xml中指定log4j配置文件的位置
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
3-log4j.properties
### set log levels ###
log4j.rootLogger=warn, stdout, file, error
### 输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c:%L - %m%n
### 输出到日志文件 ###
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/detail.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=debug ## 输出DEBUG级别以上的日志
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.S} %5p - %m @ %l%n
### 保存异常信息到单独文件 ###
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = ${catalina.home}/logs/error.log ## 异常日志文件名
log4j.appender.error.Append = true
log4j.appender.error.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss.S} %5p - %m @ %l%n
### 指定包的日志级别 ###
log4j.logger.cn.demo.springIntercept=debug
5-log4j配置文件参数详解
输出方式
org.apache.log4j.RollingFileAppender(滚动文件,自动记录最新日志)
org.apache.log4j.ConsoleAppender (控制台)
org.apache.log4j.FileAppender (文件)
org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件)
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
日志优先级别
FATAL ,ERROR ,WARN ,INFO ,DEBUG 五个级别
模式转换字符
格式修饰符
【输出】
2017-02-10 18:45:36.925 WARN - No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'dispatcher' @ org.springframework.web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:1118)
2017-02-10 18:47:39.816 DEBUG - pre Interceptor----------------> @ cn.demo.springIntercept.filter.MyInterceptor.preHandle(MyInterceptor.java:16)
2017-02-10 18:47:39.847 DEBUG - name--->mohino @ cn.demo.springIntercept.action.HelloAction.hello(HelloAction.java:16)
2017-02-10 18:47:39.848 ERROR - Error===>java.lang.NumberFormatException: For input string: "mohino" @ cn.demo.springIntercept.action.HelloAction.hello(HelloAction.java:22)
2017-02-10 18:47:39.849 DEBUG - str2Data-->0 @ cn.demo.springIntercept.action.HelloAction.hello(HelloAction.java:25)
【其他】
http://blog.youkuaiyun.com/kakaxi_77/article/details/7280182
Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)
http://blog.youkuaiyun.com/azheng270/article/details/2173430/
配置Log4j(很详细)