logback学习使用总结

一、  使用前组件准备:

 

maven项目使用logback:

    pom文件中添加:       

<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-core</artifactId>
     <version>1.1.5</version>
</dependency>
<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.1.5</version>
</dependency>
<dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-access</artifactId>
     <version>1.1.5</version>
</dependency>

 也可手动添加组件:

    logback-access-1.1.5.jar

    logback-classic-1.1.5.jar

    logback-core-1.1.5.jar 

    slf4j-api-1.7.16.jar 

注意:如果与框架结合使用 比如struts、spring、hibernate等开源框架,而这些框架很多是使用log4j记录日志的,因此需要log4j-over-slf4j-1.6.6.jar

二、开始使用

 

1、  使用logback将日志打印到控制台:

示例代码: 

/**
 * @author zw Date: 2016/10/9 Time:15:04.
 */
public class TestDemo {
    private static Logger log = LoggerFactory.getLogger(TestDemo.class);
    public static void main(String[]args){
        /**
         * log日志分为 trace debug info warn error 五个级别
         * 级别等级顺序 trace < debug < info < warn < error
         */
        log.trace("----this log is trace level");
        log.debug("----this log is debug level");
        log.info("----this log is info level");
        log.warn("----this log is warn level");
        log.error("----this log is error level");
        String name = "logback";
        String message = "demo";
        String[] params = { "logback", "logback" };
 
        // logback提供的可以使用变量的打印方式
        log.info("##########hello,{}!", name);
 
        // 使用占位符方式输出日志信息
        log.info("##########hello {}! this is {}!", name, message);
 
        // 可以传入一个数组
        log.info("##########hello {}! this is {}", params);
    }
}

logback.xml配置文件         

<?xml version="1.0" encoding="UTF-8"?>
<!--configuration 属性说明:
    scan属性:用来设置配置文件变动时是否重新加载,值是 true\false ,默认是true即 配置变动时重新加载
    scanPeriod属性:用来设置每隔多久检查一次配置是否变动,默认是1分钟,默认单位是毫秒
    debug属性:用来设置是否将logback内部的日志打印出来,即启动时输出配置加载信息。值为true\false 默认为false-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
         <!--定义日志输出格式-->
         <property name="enPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
         <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                 <encoder >
                     <pattern>${enPattern}</pattern>
                 </encoder>
         </appender>
         <!-- root的默认level是DEBUG 可以包含多个<appender-ref>元素-->
         <root level="TRACE">
             <appender-ref ref="STDOUT" />
         </root>
</configuration>

 2、  将日志记录到文件中: 

示例代码:同1中的示例代码。 

logback配置文件修改: 

在configuration中添加: 

<!--定义日志输出文件目录-->
<property name="outFilePath" value="E:/个人/demo/logs/demo.log" />

    并替换appender节点, 

<appender name="STDOUT" class="ch.qos.logback.core.FileAppender">
        <file>${outFilePath}</file>
        <append>true</append>
        <encoder charset="UTF-8">
            <pattern>${enPattern}</pattern>
        </encoder>
   </appender>

 3、同时输出到文件和控制台:

示例代码同1. 

配置文件如下: 

   <appender name="STDOUT"               class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>${enPattern}</pattern>
        </encoder>
    </appender>
 
    <appender name="toFile" class="ch.qos.logback.core.FileAppender">
        <file>${outFilePath}</file>
        <append>true</append>
        <encoder charset="UTF-8">
            <pattern>${enPattern}</pattern>
        </encoder>
    </appender>
 
    <!-- root的默认level是DEBUG 可以包含多个<appender-ref>元素-->
    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="toFile" />
    </root>

4、输出日志到文件每天或每小时等一个文件: 

示例代码:同1: 

配置文件: 

在3的基础上,修改。增加:

    <!--定义今日之前日志输出文件-->
    <property name="outOldFilePath" value="E:/个人/demo/logs/demo-%d{yyyy-MM-dd}.log" /> 

并修改 name为 toFile的appender,修改后如下: 

    <!--定义日志输出格式-->
    <property name="enPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level {%C.java:%L} - %msg%n" />
    <!--定义日志输出文件目录-->
    <property name="outFilePath" value="E:/个人/demo/logs/demo.log" />
    <!--定义今日之前日志输出文件-->
    <property name="outOldFilePath" value="E:/个人/demo/logs/demo-%d{yyyy-MM-dd}.log" />
    <!--带有loger的配置,不指定级别,不指定appender 输出到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <pattern>${enPattern}</pattern>
        </encoder>
    </appender>
 
    <!--今日日志输出到 outFilePath ,今日之前的日志在 -->
    <appender name="toFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--今日日志记录的日志文件-->
        <file>${outFilePath}</file>
        <append>true</append>
        <!--设定昨日的日志文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--昨日日志的日志文件-->
            <fileNamePattern>${outOldFilePath}</fileNamePattern>
            <!--保留30天内的日志-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>${enPattern}</pattern>
        </encoder>
    </appender>
 
    <!-- root的默认level是DEBUG 可以包含多个<appender-ref>元素-->
    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="toFile" />
    </root>

 也可以按分钟或小时分文件输出,调整 

<property name="outOldFilePath" value="E:/个人/demo/logs/demo-%d{yyyy-MM-dd}.log" />

 为:

a、按小时分:

<property name="outOldFilePath" value="E:/个人/demo/logs/demo-%d{yyyyMMddHH}.log" />

b、按分钟分:

<property name="outOldFilePath" value="E:/个人/demo/logs/demo-%d{yyyyMMddHHMM}.log" />

 如有理解不对的,请指正,谢谢

猜你喜欢

转载自lookahead.iteye.com/blog/2330154