[java学习笔记]logback的使用

半腔热情 提交于 2020-04-24 23:41:13

建立一个简单的springboot的项目,不需要引入额外的依赖即可使用logback日志;

默认的日志记录级别是info,即只显示info, warn, error的日志,debug级别的日志不会显示;

可以通过配置文件的形式,将错误日志和正常的日志分开记录,指定日志的级别,日志的格式等操作,默认的配置文件名是logback-spring.xml,一个配置文件的例子;

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义日志文件的存储地址,使用绝对路径-->
    <property name="LOG_HOME" value="G:/jarpro/ly_log/log"/>
    
    <!-- Console 输出设置 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>
    
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!--匹配到error,则拒绝,不输出-->
            <OnMatch>DENY</OnMatch>
            <!--其他的输出到该文件-->
            <OnMismatch>ACCECT</OnMismatch>
        </filter>
        <!--滚动策略按照时间滚动,一天一个日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    
    <!-- 按照每天生成日志文件 -->
    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--滚动策略按照时间滚动,一天一个日志文件-->
        <!--增加filter,只显示error-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <!--含义为只显示error以上级别的日志-->
            <level>ERROR</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}_error.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--在控制台的输出-->
    <logger name="org.apache.ibatis.cache.decorators.LoggingCache" level="DEBUG" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>
    <logger name="org.springframework.boot" level="DEBUG"/>
    <!--针对类进行级别设置-->
    <!--<logger name="cn.ly.ly_sell.LoggerTest" level="DEBUG"/>-->
    <!--全局设置级别设置-->
    <root level="info">
        <!--<appender-ref ref="ASYNC"/>-->
        <appender-ref ref="FILE"/>
        <appender-ref ref="FILEERROR"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>
View Code

日志的使用:

Logger logger = LoggerFactory.getLogger(LyLogApplicationTests.class);
    @Test
    public void contextLoads() {
        // 默认情况下debug不会显示
        logger.info("info日志");
        logger.debug("debug日志");
        logger.error("error日志");
        logger.warn("warn日志");
        // 在日志中拼装变量
        String name = "ly";
        logger.info("日志:{}", name);
    }

使用日志对象的记录日志的方法;创建logger时指定的类对象是会在这条日志输出时显示出来,所以要指定本类的类对象,方便定位到日志输出的类;

还可以使用lomback的@Slf4j的注解,简化日志记录:

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j // lombok提供的日志记录注解
public class LyLogApplicationTests {
   @Test // lombok简化日志记录 public void test() { log.info("info日志"); log.debug("debug日志"); log.error("error日志"); log.warn("warn日志"); } }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!