概述
为了方便对日志信息的输出显示,对日志内容进行了分级管理。日志级别由高到低,共分6个级别:
- fatal(致命的)
- error(错误的)
- warn(警告)
- info(报告)
- debug(调试)
- trace(堆栈)
为什么要对日志进行分级
无论是将日志输出到控制台,还是文件,其输出都会降低程序的运行效率。但由于调试、运行维护的需要,客户的要求等原因,需要进行必要的日志输出。这时就必须要在代码中加入日志输出语句。
这些输出语句若在程序运行时全部执行,则势必会降低运行效率。例如,使用System.out.printIn()将信息输出到控制台,则所有的该输出语句均将执行。会大大降低程序的执行效率。而要使其不输出,唯一的办法就是将这些输出语句逐个全部删除。这是个费时费力的过程。
将日志信息进行分级管理,便可方便的控制信息输出内容及输出位置:哪些信息需要输出,哪些信息不需要输出,只需在一个日志输出控制文件中稍加修改即可。而代码中的输出语句不用做任何修改。
从这个角度来说,代码中的日志编写,其实就是写大量的输出语句。只不过,这些输出语句比较特殊,它们具有级别,在程序运行期间不一定被执行。它们的执行是由另一个控制文件控制。
常用布局类型
org.apache.log4j.HTMLLayout
:网页布局,以HTML表格形式布局org.apache.log4j.SimpleLayout
:简单布局,包含日志信息的级别和信息字符串org.apache.log4j.PatternLayout
:匹配器布局,可以灵活地指定布局模式。其主要是通过设置 PatternLayout 的 ConversionPattern 属性值来控制具体输出格式的 。
打印参数: Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息%m
:输出代码中指定的消息%p
:输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r
:输出自应用启动到输出该log信息耗费的毫秒数%c
:输出所属的类目,通常就是所在类的全名%t
:输出产生该日志事件的线程名%n
:输出一个回车换行符,Windows平台为/r/n
,Unix平台为/n
%d
:输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22:10:28,921%l
:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
Slf4j简介
slf4j 的全称是 Simple Loging Facade For Java,即它仅仅是一个为 Java 程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger
,JDK 自带的 java.util.logging.Logger
以及 log4j
等。
POM
继续之前的项目,pom.xml
配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.funtl</groupId>
<artifactId