Spring Boot 默认使用了logback日志,里面引用的==SLF4J==,默认是带颜色的哦(老帅老帅了),甚至都不需要主动引包, …web等等包中有引用

可以使用properties和logback.xml两种方式

  1. properties
logging.path=F:\demo
logging.file=demo.log
logging.level.root=info

# mybatis 打印返回值
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  1. yml
logging:
  level:
    io:
      netty: warn
    org:
      apache: error
  1. logback.xml:

    默认在resource文件夹中找 logback_spring.xml > logback.xml

    (推荐使用前者,springboot会提供更多的功能,例如:springProfile 节点,这个节点可以多环境输出:

<!--测试环境+开发环境,多个使用逗号隔开-->
<springProfile name="test,dev">
    <logger name="com.dudu.controller" level="info"/>
</springProfile>
<!--生产环境-->
<springProfile name="prod">
    <logger name="com.dudu.controller" level = "error"/>
</springProfile>

可以启动服务的时候指定 profile (如不指定使用默认),如指定prod 的方式为: java -jar xxx.jar –spring.profiles.active=prod 或者 在配置文件中 spring.profiles.active=dev

如果你的logback.xml有特殊的名字,可以指定(在application.properties中) logging.config=classpath:logging-config.xml

使用:

Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("nihao");

案例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
        <substitutionProperty name="log.proj" value="business-server"/>
        <substitutionProperty name="log.base" value="../logs/${log.proj}" />
        <substitutionProperty name="max.size" value="200MB" />
        <jmxConfigurator />
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%date [%thread] [%X{uid} - %X{url}] %-5level %logger{80}:%line - %msg%n</pattern>
            </layout>
        </appender>
    
        <appender name="file.debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>${log.base}/${log.proj}.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${log.base}/${log.proj}_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                     <maxFileSize>${max.size}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%date [%thread] [%X{uid} - %X{url}] %-5level %logger{80}:%line - %msg%n</pattern>
            </layout>
        </appender>
        
        <appender name="file.error" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <File>${log.base}/${log.proj}_error.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${log.base}/${log.proj}_error_%d{yyyy-MM-dd}.%i.log</FileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                     <maxFileSize>${max.size}</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%date [%thread] [%X{uid} - %X{url}] %-5level %logger{80}:%line - %msg%n</pattern>
            </layout>
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 临界值过滤器,过滤掉低于指定临界值的日志 -->
                <level>ERROR</level>
            </filter>
        </appender>
      <!--   <logger name="com.netflix.discovery">
            <level value="info" />
        </logger>
        <logger name="org.apache.http">
            <level value="info" />
        </logger> -->
        <logger name="org.springframework">
            <level value="warn" />
        </logger>
        
        
    <logger name="org.apache" level="warn" />
    <logger name="com.netflix" level="warn" />
    <logger name="org.hibernate" level="warn" />
    <logger name="org.mybatis" level="warn" />
        
        <root level="debug">
            <appender-ref ref="stdout" />
            <appender-ref ref="file.debug" />
            <appender-ref ref="file.error" />
        </root>
</configuration>

彩色配置:

 <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

节点详解:

根节点 包含的属性

  1. scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
  2. scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
  3. debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

根节点的子节点:

下面一共有2个属性,3个子节点, 分别是:

  • 属性一: 设置上下文名称 ====

    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改,可以通过%contextName来打印日志上下文名称。 <contextName>logback</contextName>

  • 属性二: 设置变量 ====

    用来定义变量值的标签, 有两个属性,name和value;

    其中name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 <property name="log.path" value="E:\logback.log" />

子节点一 appender用来格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。

子节点二 root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性。

  • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL,默认是DEBUG。

可以包含零个或多个元素,标识这个appender将会添加到这个loger。

子节点三 logger用来设置某一个包或者具体的某一个类的日志打印级别、以及指定仅有一个name属性,一个可选的level和一个可选的addtivity属性。

  • name:用来指定受此logger约束的某一个包或者具体的某一个类(这个炒鸡好用!)。
  • level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。
  • addtivity:是否向上级logger传递打印信息。默认是true。

来自 http://www.cnblogs.com/zheting/p/6707041.html