Log4j
1.Maven配置文件
2.在src/main/java目录(包的根目录即classpath)新建log4j.properties文件
3.final Logger log = Logger.getLogger(Test.class);
SLF4J
最终,log4j的创始人Ceki发起了SLF4J(Simple Logging Facade for Java)项目,从设计模式的角度说,它是用来在log和代码层之间起到门面作用,对于用户来说只要使用SLF4J提供的接口,即可隐藏日志的具体实现,SLF4J提供的核心API是一些接口和一个LoggerFactory的工厂类,用户只需按照它提供的统一纪录日志接口,最终日志的格式、纪录级别、输出方式等可通过具体日志系统的配置来实现,因此可以灵活的切换日志系统。
logback
logback和log4j是同一个作者创作,它是log4j的升级版,因此logback相较于log4j有更多的优点:
原生实现了SLF4J API(log4j需要一个中间层转换)
支持XML、Groovy方式配置
支持配置文件中加入条件判断
更强大的过滤器
更丰富的免费文档
更充分的测试
自动重载有变更的配置文件
自动压缩历史日志
打印异常信息时自动包含pachage名称及版本号
日志组件
Java 日志 API 由以下三个核心组件组成:
Loggers:Logger 负责捕捉事件并将其发送给合适的 Appender。
Appenders:也被称为 Handlers,负责将日志事件记录到目标位置。在将日志事件输出之前, Appenders 使用Layouts来对事件进行格式化处理。
Layouts:也被称为 Formatters,它负责对日志事件中的数据进行转换和格式化。Layouts 决定了数据在一条日志记录中的最终形式。
当 Logger 记录一个事件时,它将事件转发给适当的 Appender。然后 Appender 使用 Layout 来对日志记录进行格式化,并将其发送给控制台、文件或者其它目标位置。另外,Filters 可以让你进一步指定一个 Appender 是否可以应用在一条特定的日志记录上。在日志配置中,Filters 并不是必需的,但可以让你更灵活地控制日志消息的流动。
应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。1
2
3import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
通常情况下,一种好的做法是,我们在当前类下使用 class.getName() 作为新 Logger 的名字。
示例:
Logger logger = Logger.getLogger(MyClass.class.getName());
logger.log() 方法除了日志消息以外,还需要一个日志级别作为参数:
logger.log(Level.WARNING, “This is a warning!”);