Java日志处理:
https://blog.csdn.net/everyok/article/details/82882137

日志处理方案(slf4j+logback):
https://blog.csdn.net/gcyyn/article/details/97056513?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_pc_relevant

common-logging (JCL):
通用日志接口
动态查找机制,在程序运行时自动找出使用的日志库
一般配合log4j使用(其内部有一个简单的实现simple-logger),
引入log4j, 并在classpath配置log4j.xml,commons-logging 就会使log4j 使用正常
好处:代码依赖common-logging,而不是日志实现的第三方库

  1. import org.apache.commons.logging.Log;
  2. import org.apache.commons.logging.LogFactory;
  3. public class A{
  4. private static Log logger = LogFactory.getLog(A.class);
  5. }

slf4j

Simple Logging Facade for JAVA,java简单日志门面
不同于common-logging是在运行时进行的动态绑定,它在编译时静态绑定真正的Log库
如果你需要使用某一种日志实现,那么你必须选择正确的SLF4J的jar包的集合(各种桥接包)。使用slf4j的常见代码:

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. public class A {
  4. private static Logger logger = LoggerFactory.getLogger(Test.class);
  5. }

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的。

  1. public final class Logger implements org.slf4j.Logger, LocationAwareLogger,
  2. AppenderAttachable<ILoggingEvent>, Serializable {
  3. }

输出端Appender

常用的Appender有:
ConsoleAppender:打印日志信息到控制台,相当于System.out, System.err
FileAppender:打印日志信息到文件
RollingFileAppender: 根据RollingPolicy和TriggeringPolicy打印日志信息到文件中, TimeBasedRollingPolicy同时继承了这两个类

logback.xml配置:

  1. 配置文件的例子文件如下:
  2. <?xml version="1.0" encoding="UTF-8" ?>
  3. <configuration>
  4. <!-- 控制台输出日志 -->
  5. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  6. <layout class="ch.qos.logback.classic.PatternLayout">
  7. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} - %msg%n</pattern>
  8. </layout>
  9. </appender>
  10. <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
  11. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  12. <File>${logCatolog}</File>
  13. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  14. <FileNamePattern>${logCatolog}.%d{yyMMdd}</FileNamePattern>
  15. <!-- keep 60 days worth of history -->
  16. <MaxHistory>60</MaxHistory>
  17. </rollingPolicy>
  18. <layout class="ch.qos.logback.classic.PatternLayout">
  19. <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</Pattern>
  20. </layout>
  21. </appender>
  22. <root level="ERROR">
  23. <appender-ref ref="STDOUT" />
  24. <appender-ref ref="FILE" />
  25. </root>
  26. <!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
  27. <logger name="com.pptv">
  28. <level value="DEBUG" />
  29. </logger>
  30. <!--mybatis -->
  31. <logger name="jdbc.sqltiming" level="INFO" />
  32. </configuration>

LogBack注意点:

log日志有相应的级别,从小到大分别为:tracelogger的选择是与java包的命名空间相关的。优先选择最近的命令空间的logger。通过name进行配置。
root是默认的logger,当找不到对应的logger的时候,会以root配置的logger进行输出,并且root配置的appender会被其它logger继承。

[

](https://blog.csdn.net/everyok/article/details/82882137)