我们以前记录日志是通过输出语句完成的,有很多弊端:
日志技术具备的优势
输出语句 | 日志技术 | |
---|---|---|
输出位置 | 只能是控制台 | 可以将日志信息写入到文件或数据库中 |
取消日志 | 需要修改代码,灵活性较差 | 不需要修改代码,灵活性较好 |
多线程 | 性能较差 | 性能较好 |
细说一下性能区别:
日志规范就相当于接口,日志实现框架就相当于接口的实现类
需求:导入Logback日志技术到项目中,用于记录系统的日志信息
将Logback的核心配置文件logback.xml直接 拷贝到src目录下(必须是src目录)
在代码中获取日志的对象
public static final Logger LOGGER = LoggerFactory.getLogger("类对象");
使用日志对象LOGGER调用其方法输出日志信息
public class Test {
//1.日志对象一个就够了,所以用static,并且不想让日志对象被修改,所以用final
//2.Test.class是日志对象的名字,写成Test.class没有实际含义,只是
//为了到时候追踪日志对象时一眼就能看出来是从哪个类里打日志的
public static final Logger LOGGER = LoggerFactory.getLogger("Test.class");
public static void main(String[] args) {
try {
LOGGER.debug("main方法开始执行了~~");
LOGGER.info("开始记录第二行日志,我要开始做除法");
int a = 10;
int b = 0;
LOGGER.trace("a=" + a);
LOGGER.trace("b=" + b);
System.out.println(a / b);
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("功能出现异常" + e);
}
}
}
Logback日志系统的特性都是通过核心配置文件logback.xml控制的
通过logback.xml中的标签可以设置输出位置和日志信息的详细格式
通常可以设置2个日志输出位置:一个是控制台,一个是系统文件中
输出到控制台
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<target>System.outtarget>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%npattern>
encoder>
appender>
输出到系统文件
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
<charset>utf-8charset>
encoder>
<file>C:/code/itheima-data.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>C:/code/itheima-data2-%d{yyyy-MM-dd}.log%i.gzfileNamePattern>
<maxFileSize>1MBmaxFileSize>
rollingPolicy>
appender>
<root level="ALL">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
root>
这里如果不写则不会在控制台打印日志
日志级别(忽略大小写)
程度依次是:TRACE
作用:用于控制系统中哪些日志级别是可以输出的,只输出级别不低于设定级别的日志信息
ALL和OFF分别是打开全部日志信息及关闭全部日志信息
具体在标签的level属性中设置日志级别
<root>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
root>