日志:
程序中的日志可以用来记录程序在运行的时候点点滴滴。并可以进行永久存储
日志和输出语句的区别:
输出语句 | 日志技术 | |
---|---|---|
取消日志 | 需要修改代码,灵活性比较差 | 不需要修改代码,灵活性比较好 |
输出位置 | 只能是控制台 | 可以将日志信息写入到文件或者数据库中 |
多线程 | 和业务代码处于一个线程中 | 多线程方式记录日志,不影响业务代码的性能 |
Log4J作用:
- 通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件等位置
- 可以控制每一条日志的输出格式
- 通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程
- 可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码
日志核心技术:
Loggers(记录器) 日志的级别
- Loggers组件在此系统中常见的五个级别:DEBUG、INFO、WARN、ERROR 和 FATAL。
- DEBUG:开发过程打印一些基本的信息
- INFO:开发过程打印一些重要的信息
- WARN:警告,可能会出现问题,给出一些提示
- ERROR:发生错误,但是不影响程序继续运行
- FATAL:严重的错误,程序会被停止
- DEBUG < INFO < WARN < ERROR < FATAL。
- Log4j有一个规则:只输出级别不低于设定级别的日志信息。对应上面的级别
- 比如配置文件定义了一个INFO级别的,那么 DEBUG的就不会被输入,如果遇到输出不了的问题,可以看看是不是配置的级别太高了
配置文件:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.ca.ImmediateFlush=true
log4j.appender.ca.Target=System.er
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
测试类:
public class Demo05 {//使用log4j的api来获取日志的对象//弊端:如果以后我们更换日志的实现类,那么下面的代码就需要跟着改//不推荐使用// private static final Logger LOGGER = Logger.getLogger(Demo05.class);//使用slf4j里面的api来获取日志的对象//好处:如果以后我们更换日志的实现类,那么下面的代码不需要跟着修改//推荐使用private static final Logger LOGGER = LoggerFactory.getLogger(Demo05.class);public static void main(String[] args) {LOGGER.debug("debug级别的日志");LOGGER.info("info级别的日志");LOGGER.warn("warn级别的日志");LOGGER.error("error级别的日志");}
}
Appenders(输出源)
Appenders:日志要输出的地方
- 把日志输出到不同的地方,如控制台(Console)、文件(Files)等。
- org.apache.log4j.ConsoleAppender(控制台)
- org.apache.log4j.FileAppender(文件)
Layouts(布局) 日志输出的格式
常用的布局管理器:
可以根据自己的喜好规定日志输出的格式
- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
配置文件:
格式:
- log4j.rootLogger=日志级别,appenderName1,appenderName2,…
- 日志级别:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
OFF:关闭所有日志
ALL:展示所有日志- appenderName1 就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。
例如:log4j.rootLogger=INFO,ca,fa
ConsoleAppender(往控制台输出)常用的选项
- ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
- Target=System.err 默认值是System.out。
System.err是错误输出流,打印的是红色的
FileAppender(往文件输出)常用的选项
- ImmediateFlush=true:表示所有消息都会被立即输出。设为false则不输出,默认值是true
- Append=false
true表示将消息添加到指定文件中,原来的消息不覆盖。
false则将消息覆盖指定的文件内容,默认值是true。- File=D:/logs/logging.log4j: 指定消息输出到logging.log4j文件中
PatternLayout常用的选项
log4j.PatternLayout:可以灵活的指定布局模式,最常使用
- log4j.SimpleLayout:包含日志信息的级别和信息字符串
- log4j.TTCCLayout:包含日志产生的时间、线程、类别等信息
ConversionPattern=%m%n设定以怎样的格式显示消息