IDEA整合SSM框架之配置日志logback(七)

10 篇文章 0 订阅
4 篇文章 0 订阅

配置日志logback

Logback是一个开源日志组件,性能比log4j号官方网站: http://logback.qos.ch。它分为下面下个模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

本文演示logback的使用、配置详解、以及与lombok插件一起使用。

在配置logback之前,请配置lombok日志打印工具,也可使用Logger工具

lombok相关配置

引入logback相关依赖

<!--logback 日志处理-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.logback-extensions/logback-ext-spring -->
    <dependency>
        <groupId>org.logback-extensions</groupId>
        <artifactId>logback-ext-spring</artifactId>
        <version>0.1.4</version>
    </dependency>
</dependencies>

在resources的根目录下创建logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->
<!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" debug="false">
    <!-- 自定义定义日志文件 输入位置 tomcat 下的logs路径下 可以更改位置 -->
    <property name="path" value="../logs/demo-springmvc"/>

    <!--%highlight() 颜色打印 不同级别日志打印不同颜色-->
    <property name="CONSOLE_LOG_PATTERN" value="%highlight(%d{yyyy-MM-dd HH:mm:ss.SSS}  %-5level [%thread] [line%4line] %logger{50} : %msg %n)"/>
    <!--info级别日志文件配置-->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [line%4line] %logger{50} : %msg%n</pattern>
            <charset>UTF-8</charset>
            <!-- 此处设置字符集,防止中文乱码 -->
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 最大64MB 超过最大值,会重新建一个文件-->
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>

        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <prudent>false</prudent>
    </appender>
    <!--警告文件配置-->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [line%4line] %logger{50} : %msg%n</pattern>
            <charset>UTF-8</charset>
            <!-- 此处设置字符集,防止中文乱码 -->
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 最大64MB 超过最大值,会重新建一个文件-->
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>

        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <prudent>false</prudent>
    </appender>
    <!--错误日志配置-->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件输出的日志 的格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [line%4line] %logger{50} : %msg%n</pattern>
            <charset>UTF-8</charset>
            <!-- 此处设置字符集,防止中文乱码 -->
        </encoder>
        <!-- 配置日志所生成的目录以及生成文件名的规则 在logs/mylog-2016-10-31.0.log -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 最大64MB 超过最大值,会重新建一个文件-->
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <prudent>false</prudent>
    </appender>
    <!--debug配置-->
    <appender name="FILE_DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件输出的日志 的格式 -->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [line%4line] %logger{50} : %msg%n</pattern>
            <charset>UTF-8</charset>
            <!-- 此处设置字符集,防止中文乱码 -->
        </encoder>
        <!-- 配置日志所生成的目录以及生成文件名的规则 在logs/mylog-2016-10-31.0.log -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/debug/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 最大64MB 超过最大值,会重新建一个文件-->
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
        <!--如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。-->
        <prudent>false</prudent>
    </appender>

    <!--控制台输出的格式设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 控制台输出的日志 的格式 -->
        <encoder>
            <pattern>
                ${CONSOLE_LOG_PATTERN}
            </pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 只是DEBUG级别以上的日志才显示 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
    </appender>

    <!-- root级别 (name = dao 实现SQL打印并写入日志文件,与mybatis-config.xml中的dao.对应)  DEBUG -->
    <root name="dao" level="DEBUG">
        <!-- 控制台输出 -->
        <appender-ref ref="STDOUT"/>
        <!-- 文件输出 表示开启对应的日志级别 -->
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_DEBUG"/>
    </root>
</configuration>

在web.xml配置logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <display-name>demo-springmvc</display-name>
    <servlet>
        <!--与servlet-mapping节点中的servlet-name相同-->
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--扫码spring配置文件,会加载以spring-开头的,xml文件-->
            <param-value>classpath:xml/spring-*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <!--与servlet节点中的servlet-name相同-->
        <servlet-name>mvc</servlet-name>
        <!--可以设置为/   .do等后缀 访问接口时,需要带设置的后缀-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!--配置logback文件-->
    <context-param>
        <param-name>logbackConfigLocation</param-name>
        <param-value>classpath:logback.xml</param-value>
    </context-param>
</web-app>

说明一下,web.xml与之前配置的xml内容有所不同,如此改变时为了解决引入logback.xml报红色,虽运行程序无影响,老感觉程序报错

将原来文件中的头部

<!DOCTYPE web-app PUBLIC
            "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
            "http://java.sun.com/dtd/web-app_2_3.dtd" >
    <web-app> 

替换为现在

 <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
            http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
             version="2.5">

运行项目,查看日志打印结果

  • 在TUserServiceImpl中打印日志
	@Override
    public Object select(Integer id) {
        TUser user = tUserMapper.selectByPrimaryKey(id);
        log.debug(JSON.toJSONString(user));
        log.info(JSON.toJSONString(user));
        log.warn(JSON.toJSONString(user));
        log.error(JSON.toJSONString(user));
        return user == null ?
                RestResult.fail("查询失败") : RestResult.ok("查询成功", user);
    }
  • 控制台输出四种彩色日志
    在这里插入图片描述
  • 在tomcat安装目录下的logs文件下生成对应项目的文件夹demo-springmv
    在这里插入图片描述

日志级别设置成debug级别,可打印SQL语句

该章节logback.xml可直接复制粘贴在自己项目中,修改日志存放路径和日志级别,可直接使用。

IDEA整合SSM框架教程

写在最后

人这一生也没有多少时间可以挥霍,
踏实一点,务实一些,
做自己想做的事,
如此简单!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值