日志框架
1 背景
为了记录程序的运行信息,传统的方式,是使用 System.out.println
。
但是这种方式,虽然简单,却有很多缺点:
- 无法对日志的输出,做有效的控制
- 效率不够高
- 功能不够强,比如无法对日志进行自动格式化输出
- 输出的目的地比较单一,只能输出在控制台
比如,要对日志的输出与否做控制,可以做简单的封装:
public class LogUtil { private static boolean logSwitch = true; public static void log(String msg) { if (logSwitch) { System.out.println(msg); } } } // Logutil.log("ksdjksdjfjk");
对于更复杂的情况,需要进一步封装。
对于一个通用的日志空间,至少需要以下概念:
logger
,日志对象,使用它产生日志记录level
,日志级别,用来控制日志的显示与否formatter/render/layout
,日志格式,用来控制日志输出的格式、样式handler/appender
,处理器,用来将日志输出到相应目的地(屏幕?文件?数据库?)
2 java.util.logging
Java 自带的日志框架。
基本使用:
public static Logger logger = LogManager.getLogger(A.class); public void test() { logger.info("A.info"); logger.warning("A.warning"); logger.severe("A.servere"); logger.fine("A.fine"); }
3 Apache Common-Logging 接口
4 SLF4j 接口
5 Log4j
6 SLF4j + Logback
在 pom.xml 中添加:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
在 classpath 下面添加 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> %msg%n </Pattern> </layout> <!-- mybatis 的设置 --> <logger name="com.nf147.sss.dao" level="debug" additivity="false"> <appender-ref ref="STDOUT" /> </logger> <root level="error"> <appender-ref ref="STDOUT" /> </root> </configuration>