本文已参与「新人创作礼」活动,一起开启掘金创作之路。
日志技术和输出语句的区别
输出语句的弊端
- ① 想要取消记录的信息,需要修改代码才能完成。
- ② 信息只能展示在控制台,不能将其记录到其他的位置(文件、数据库等)。
日志
- 生活中的日志:生活中的日志就好比日记,可以记录生活中的点点滴滴。
- 程序中的日志:程序中的日志可以记录程序在运行的时候的点点滴滴,并可以进行永久存储。
区别
输出语句 | 日志技术 | |
---|---|---|
取消日志 | 需要修改代码,灵活性较差 | 不需要修改代码,灵活性较好 |
输出位置 | 只能是控制台 | 可以将日志信息写入到文件或数据库中 |
多线程 | 和业务代码处于一个线程中 | 多线程方式记录日志,不影响业务代码的性能 |
日志技术的体系结构
Log4j
- Log4j 是 Apache 的一个开源项目。
- 通过使用 Log4j ,我们可以控制日志信息输出的
目的地是控制台、文件
等位置。
- 通过使用 Log4j ,我们可以
控制
每一条日志
的输出格式
。
- 通过使用 Log4j ,我们可以
定义
每一条日志
信息的级别
,能够更加细致的控制日志的生成过程。
- 上述的功能都可以通过一个
配置文件
来灵活的配置,而不需要修改应用的代码。
Log4j的入门
- Log4j 的开发流程:
- ① 导入 Log4j 相关的 jar 包📎Log4J相关jar包.zip。
- ② 编写 Log4j 的配置文件📎Log4J配置文件.zip。
- ③ 在代码中获取日志的对象。
-
④ 按照级别设置记录日志信息。
-
示例:
- log4j.properties
log4j.rootLogger=debug,my,fileAppender
### direct log messages to my ###
log4j.appender.my=org.apache.log4j.ConsoleAppender
log4j.appender.my.ImmediateFlush=true
log4j.appender.my.Target=System.out
log4j.appender.my.layout=org.apache.log4j.PatternLayout
log4j.appender.my.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
# fileAppender演示ʾ
log4j.appender.fileAppender=org.apache.log4j.FileAppender
log4j.appender.fileAppender.ImmediateFlush=true
log4j.appender.fileAppender.Append=true
log4j.appender.fileAppender.File=D:/log4j-log.log
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d %5p %c{1}:%L - %m%n
- Log4jTest01.java
package com.github.demo2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jTest01 {
// 使用Slf4j中的API来获取日志的对象
// 好处:如果以后我们需要更换日志的实现,那么下面的代码不需要随之修改
// 推荐使用
private static Logger LOGGER = LoggerFactory.getLogger(Log4jTest01.class);
public static void main(String[] args) {
LOGGER.debug("debug级别的日志");
LOGGER.info("info级别的日志");
LOGGER.warn("warn级别的日志");
LOGGER.error("error级别的日志");
}
}
Log4j 的组成
- Loggers:记录器,日志的级别。
- Loggers 组件在系统中常见的5个级别:debug 、info 、warn 、error 、fatal。
- debug < info < warn < error < fatal。
- Log4j 有一个规则:
只输出级别不低于设定级别的日志信息
。换言之,如果设置的日志级别是 info ,那么只能输出 info 、warn 、error 和 fatal 级别的日志信息。
- Appenders:输出源,日志要输出的地方,比如控制台(console)、文件(files)等。
- org.apache.log4j.ConsoleAppender:控制台。
- org.apache.log4j.FileAppender:文件。
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.设置1=值1
log4j.appender.ca.设置2=值2
log4j.appender.ca.设置3=设置3
log4j.appender.ca.设置4=设置4
...
log4j.appender.ca.设置n=设置n
- Layouts:布局,可以根据自己的洗好规定日志输出的格式
- 常见的布局管理器:
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用。
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.设置1=值1
log4j.appender.ca.layout.设置2=值2
log4j.appender.ca.layout.设置3=设置3
log4j.appender.ca.layout.设置4=设置4
...
log4j.appender.ca.layout.设置n=设置n
Log4j 的配置文件
配置文件示例
log4j.rootLogger=debug,ca,fileAppender # 根Logger
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
配置根 Logger
- 格式:log4j.rootLogger=-日志级别,appenderName1,appenderName2,appenderName3,...
- 日志级别:
- off 、
debug
、info
、warn
、error
、fatal 、all 或者自定义的级别。
-
appenderName1:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。如:
log4j.rootLogger=INFO,ca,fa
。 -
配置 appender
log4j.appender.ca=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.out
- log4j.appender.ca:
- org.apache.log4j.ConsoleAppender:向控制台输出。
- org.apache.log4j.FileAppender:向文件输出。
- ConsoleAppender的常用选项:
- ImmediateFlush=true:表示所有的消息被立即输出,设置为 false 则不输出,默认值为 true。
- Target=System.err:默认是 System.out 。
- FileAppender的常用选项:
- ImmediateFlush=true:表示所有的消息被立即输出,设置为false则不输出,默认值为 true。
- Append=true:true 表示将消息添加到指定文件中,原来的消息不覆盖;false 则将消息覆盖指定的文件内容,默认值为 true。
- File=D:/log4j-log.log:指定消息输出到 log4j-log.log 文件中。
配置layout
log4j.appender.ca.layout=org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern=%d %t %5p %c{1}:%L - %m%n
- log4j.appender.ca.layout:
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),常用
。
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)。
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)。
- PatternLayout的常见选项:
- ConversionPattern=%d %t %5p %c{1}:%L - %m%n,设定以怎么样的格式显示消息。