20200119 日志框架

日志体系与SringBoot的日志应用

开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;

日志抽象层----->日志实现层。调用日志抽象层里面的方法。

把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口。

使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。

日志门面+日志实现,配置文件是指日志实现框架的配置。

api----->转换器----->日志具体实现。

使用slf4j以后,配置文件还是做成日志实现框架自己本身的配置文件。

SpringBoot使用的默认日志框架是Logback,并用INFO级别输出到控制台。

 

日志模块

slf4j中的Logger使用占位符{}来传入参数记录日志信息。使用占位符{}方式比下面的字符串连接更加高效。

logger.info("22222:{}","test");

如果有多个占位符,就要传递对象数组进去。

 

slf4j日志配置文件,输出tomcat格式

API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志

 

两个设置

1)指定日志文件的输出位置;

2)指定日志配置文件的位置;

#logback settings
logging.level.ROOT=INFO
logging.path=c:/tomcat-log/${spring.application.name}
#logback setting
logging.level.ROOT=INFO
logging.path=/opt/tomcat-log/${spring.application.name}

日志级别:ALL <DEBUG <INFO <WARN <ERROR,如果设置打印级别为WARN ,那么前面级别的日志将不会打印。

配置文件:日志级别、日志处理器,用哪个处理器处理当前级别的日志?

日志是分级别的,打印什么级别的日志?如何设置日志的输出级别?

 

日志框架三大组件

1、日志记录器:日志输出实例Logger,通过它才能输出日志

2、日志处理器:日志输出目标,控制台、文件等,可以在多个输出文件上记录相同的信息。

3、日志输出格式:时间戳、线程名称、日志级别、日志内容、对应输出该日志的类、对应输出该日志的方法、行号及MDC信息等。PatternLayout:可以灵活地指定布局模式。控制日志的输出格式

 

日志处理器:要将日志信息写入文件,您必须使用FileAppender。

使用日志框架,第一步就是获取日志记录器,这个记录器将负责控制日志信息的输出。

传入一个class对象,表示记录当前类的日志

日志框架使用:日志的代理,统一使用它的配置文件。

 

slf4j只是一个日志标准,并不是日志系统的具体实现。

1、提供日志接口;

2、提供获取日志对象的方法;

 

log日志

1、工厂类

2、log中的方法info()或者error()日志工具在项目中的使用,日志类中有哪些方法?方法是根据级别定义的。

3、在日志中打印当前时间,SimpleDateFormat,format(new Date())

4、log中是否已经有了要包含的时间 或者说发生故障的时间,这个要在log配置文件中查询?

5、info,error里面所有的错误日志都有记录。

6、服务器端日志文件的记录位置,配置文件中有。

 

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

引入了logback日志框架;

 

mvn dependency:tree

查看依赖之间的传递关系, log日志有哪个jar包引入的?

 

日志框架怎么使用,怎么配置?

log4j.rootLogger 是配置文件的根节点,这个指定了你的日志要以什么级别,输出到哪里去,例子中级别是:info,输出到console,logfile去。

log4j.appender 配置输出日志添加到哪去,这个就需要配合上面的console,logfile这个

 

ConsoleAppender

指定了输出到console日志,是输出到控制台的日志,这个就保证了你在代码中输入的log.info()的内容能在控制台看见了,没有这个,你log.info的内容就不可能出现控制台上

 

FileAppender

输出到logfile的日志,是添加到文件中去。这个就是平常我们在日志文件中查看日志,就是因为这个,才能让日志输出到我们指定的文件。

指定日志所在的目录以及日志文件名:日志的目录以及日志文件名。

 

控制台日志:根据日志级别用颜色区分,这个特别好。

控制台Console日志数据查询快捷键 Ctrl+K,可以查看某指定类的日志。如何对日志进行过滤?

 

1)每天产生一个日志文件,

2)文件大小到达指定尺寸的时候产生一个新的文件。

 

日志框架的使用:把日志框架封装成一个jar包,配置文件封装到jar包里面使用,所以看不到配置文件

 

写入位于日志目录中名为“log.out”的文件

日志文件的记录位置;

logging.config=classpath:log4j2-dev.xml 这个地址是在哪里啊?

 

如何让系统中所有的日志都统一到slf4j?

1、将系统中其他日志框架先排除出去;

2、用中间包来替换原有的日志框架;

3、我们导入slf4j其他的实现;

 

SpringBoot日志使用

SpringBoot选用 SLF4j和logback

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-logging</artifactId>

</dependency>

总结

  1. 、SpringBoot底层也是使用slf4j+logback的方式进行日志记录
  2. 、SpringBoot也把其他的日志都替换成了slf4j;
  3. 、中间替换包(转换包)

logback.xml:配置文件能够被日志框架直接识别

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="30 seconds">
    <property name="encoder.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %X{req.xForwardedFor} %X{req.method} %X{req.requestURL} %X{req.queryString} %X{req.userAgent} %-5level %logger{36} - %msg%n"/>
    <property name="rollingPolicy.maxFileSize" value="5MB"/>
    <property name="rollingPolicy.maxHistory" value="30"/>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <Target>System.out</Target>
        <encoder>
            <pattern>${encoder.pattern}</pattern>
        </encoder>
    </appender>
    <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${encoder.pattern}</pattern>
            <charset>GBK</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/trace.%i.log</fileNamePattern>
            <maxHistory>${rollingPolicy.maxHistory}</maxHistory>
            <maxFileSize>${rollingPolicy.maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${encoder.pattern}</pattern>
            <charset>GBK</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/info.%i.log</fileNamePattern>
            <maxHistory>${rollingPolicy.maxHistory}</maxHistory>
            <maxFileSize>${rollingPolicy.maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${encoder.pattern}</pattern>
            <charset>GBK</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/debug.%i.log</fileNamePattern>
            <maxHistory>${rollingPolicy.maxHistory}</maxHistory>
            <maxFileSize>${rollingPolicy.maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${encoder.pattern}</pattern>
            <charset>GBK</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/warn.%i.log</fileNamePattern>
            <maxHistory>${rollingPolicy.maxHistory}</maxHistory>
            <maxFileSize>${rollingPolicy.maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${encoder.pattern}</pattern>
            <charset>GBK</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}/error.%i.log</fileNamePattern>
            <maxHistory>${rollingPolicy.maxHistory}</maxHistory>
            <maxFileSize>${rollingPolicy.maxFileSize}</maxFileSize>
        </rollingPolicy>
    </appender>
    <!--logger-->
    <logger name="com.ibatis" level="DEBUG" />
    <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />
    <logger name="java.sql.Connection" level="DEBUG" />
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />
    <!--root-->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="INFO" />
        <appender-ref ref="ERROR" />
    </root>
</configuration>

 

一般情况下,框架本身使用的是slf4j日志,或者说日志门面框架。

使用日志框架的目的是帮助我们快速定位问题。

使用日志框架,我们可以控制日志信息的输出,我们可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。日志配置文件。

# 配置根Logger
log4j.rootLogger = debug,stdout,D,E

# 1.配置日志信息输出的目的地(还可以输出到文件,并且设置日志文件的大小) Appender 负责控制日志记录操作的输出。
# 输出日志信息到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out

# 2.配置日志信息的格式布局(布局类型可以选择)
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

# 输出DEBUG级别以上的日志到文件F://logs/debug.log
log4j.appender.D = org.apache.log4j.FileAppender
log4j.appender.D.File = F:/logs/debug.log
# true表示将日志信息追加到指定文件中,false表示覆盖指定文件中的内容
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
# 指定布局格式
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

 

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值