Java日志处理:
https://blog.csdn.net/everyok/article/details/82882137
common-logging (JCL):
通用日志接口
动态查找机制,在程序运行时自动找出使用的日志库
一般配合log4j使用(其内部有一个简单的实现simple-logger),
引入log4j, 并在classpath配置log4j.xml,commons-logging 就会使log4j 使用正常
好处:代码依赖common-logging,而不是日志实现的第三方库
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class A{
private static Log logger = LogFactory.getLog(A.class);
}
slf4j
Simple Logging Facade for JAVA,java简单日志门面
不同于common-logging是在运行时进行的动态绑定,它在编译时静态绑定真正的Log库
如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各种桥接包)。使用slf4j的常见代码:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class A {
private static Logger logger = LoggerFactory.getLogger(Test.class);
}
slf4j静态绑定原理
SLF4J 会在编译时绑定。org.slf4j.impl.StaticLoggerBinder面实现对具体日志方案的绑定接入。任何一种基于slf4j 的实现都要有一个这个类,也就是说实现了slf4j的产商需要重新定义与这个类相同的类名与包名。
Log4j
日志实现库,设置输出路径,格式等。
LogBack
Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。
[
](https://blog.csdn.net/everyok/article/details/82882137)
Logback日志使用
重要的三个类:
- 日志记录器(Logger)
- 输出端(Appender)
- 日志格式化器(Layout)
日志记录器Logger
在logback中只有一个日志记录器Logger,继承自org.slf4j.Logger且是final的。
public final class Logger implements org.slf4j.Logger, LocationAwareLogger,
AppenderAttachable<ILoggingEvent>, Serializable {
}
输出端Appender
常用的Appender有:
ConsoleAppender:打印日志信息到控制台,相当于System.out, System.err
FileAppender:打印日志信息到文件
RollingFileAppender: 根据RollingPolicy和TriggeringPolicy打印日志信息到文件中, TimeBasedRollingPolicy同时继承了这两个类
logback.xml配置:
配置文件的例子文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!-- 控制台输出日志 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} - %msg%n</pattern>
</layout>
</appender>
<!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logCatolog}</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${logCatolog}.%d{yyMMdd}</FileNamePattern>
<!-- keep 60 days worth of history -->
<MaxHistory>60</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</Pattern>
</layout>
</appender>
<root level="ERROR">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<logger name="com.pptv">
<level value="DEBUG" />
</logger>
<!--mybatis -->
<logger name="jdbc.sqltiming" level="INFO" />
</configuration>
LogBack注意点:
log日志有相应的级别,从小到大分别为:trace
root是默认的logger,当找不到对应的logger的时候,会以root配置的logger进行输出,并且root配置的appender会被其它logger继承。
[