Java_日志技术

目录

一、概念和作用

二、日志技术

1.日志体系结构

2.Logback概述

三、Logback快速入门

1.使用Logback目的

2.实现步骤

四、Logback配置 

1.输出位置

2.日志级别


一、概念和作用

作用

希望系统能记住某些数据是被谁操作的,比如被谁删除了?

想分析用户浏览系统的具体情况,以便挖掘用户的具体喜好?

当系统在开发或者上线后出现了bug,崩溃了,该通过什么去分析、定位bug?

概念

用来记录程序运行过程中的信息,并可以进行永久存储。

优势和特点

可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)。

可以随时以开关的形式控制是日志的记录和取消,无需侵入到源代码中去进行修改。

和输出语句的区别

输出语句

日志技术

输出位置

输出到控制台

可以将日志信息写入到文件或者数据库中

取消日志

需要修改代码,灵活性比较差

不需要修改代码,灵活性比较好

多线程

性能较差

性能较好

二、日志技术

1.日志体系结构

 

日志接口:一些规范,提供给日志的实现框架设计的标准。

日志框架:牛人或者第三方公司已经做好的实现代码,后来者直接可以拿去使用。

Logback是基于slf4j的日志规范实现的框架。

2.Logback概述

Logback日志框架

logback-core: 该模块为其他两个模块提供基础代码。 (必须有)  

logback-classic:完整实现了slf4j API的模块。(必须有)  

logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能(可选模块)

想使用Logback日志框架,至少需要在项目中整合如下三个模块:

slf4j-api:日志接口

logback-core:基础模块

logback-classic:功能模块,它完整实现了slf4j API

三、Logback快速入门

1.使用Logback目的

使用Logback日志框架,纪录系统的运行信息。

2.实现步骤

①:导入Logback框架到项目中去。在项目下新建文件夹lib,导入Logback的jar包到该文件夹下

②:将存放jar文件的lib文件夹添加到项目依赖库中去。

在IDEA中Add as Lib

③:将Logback的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/home" />

    <!--控制台日志, 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 日志输出级别 -->
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    </root>
</configuration>

④:创建Logback框架提供的Logger日志对象,后续使用其方法记录系统的日志信息。

public static final logger LOGGER = LoggerFactory.getLogger("类名");

四、Logback配置 

1.输出位置

输出到控制台的配置标志

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

输出到系统文件的配置标志

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

2.日志级别

如果系统上线后想关闭日志,或者只想记录一些错误的日志信息,可以通过设置日志的输出级别来控制哪些日志信息输出或者不输出。

日志级别

ALL  和 OFF分别是打开、及关闭全部日志信息。

除此之外,日志级别还有: TRACE <  DEBUG <  INFO < WARN < ERROR  ; 默认级别是DEBUG,对应其方法

作用:当在logback.xml文件中设置了某种日志级别后,系统将只输出当前级别,以及高于当前级别的日志。

具体在<root level=“INFO”>标签的level属性中设置指定系统的日志级别。

<root level=“INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE" />
</root>

五、SpringBoot下使用Slf4j

1.导入依赖

slf4j可以理解为一个log的接口,导入了这个包后即可使用log.error() log.warn() log.info()等用于日志输出。

projectlombok是包含@Slf4j这个注解的包

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.5</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.7</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.4.7</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.0</version>
</dependency>

2.导入配置文件logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:当此属性设置为 true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan为 true 时,此属性生效。默认的时间间隔为1分钟。-->
<!-- debug:当此属性设置为true 时,将打印出 logback内部日志信息,实时查看 logback运行状态。默认值为 false。通常不打印-->
<configuration scan="true" scanPeriod="10 seconds">
    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>>%date %5p [%thread] %logger{60} [%file :  %line] %msg%n</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--2. 输出到文档-->
    <!-- level为 DEBUG 日志,时间滚动输出  -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文档的路径及文档名 -->
        <file>D:\myDev\log\debug.log</file>
        <!--日志文档输出格式-->
        <encoder>
            <pattern>%date %5p [%thread] %logger{60} [%file :  %line] %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 添加.gz历史日志会启用压缩大大缩小日志文件所占空间-->
            <!--<fileNamePattern>/ home/log/stdout.log .%d{yyyy-MIA-dd}.log</fileNamePattern>-->
            <fileNamePattern>D:\myDev\log\debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文档保留天数-->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 此日志文档只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--单个指定-->
    <logger name="com.guo.springboot.mapper" level="DEBUG"/>
    <!--全部指定-->
    <!--如果root标签不指定日志级,默认日志级别为debug,,,,
        root标签指定日志级别和追加器指定日志级别,哪个日志级别高以哪个为准
    -->
    <root level="debug">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="DEBUG_FILE"/>    <!--引用appender name-->
    </root>
</configuration>

参考:CSDN博主「848698119」的原创文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值