003 微服务架构 SpringBoot应用(三) LogBack日志

LogBack日志框架:

1. 创建logback.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true 
    scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<configuration scan="true" scanPeriod="30 seconds" debug="false" >
    <!-- 每个logger都关联到logger上下文,默认上下文名称为default。但可以使用<contextName>设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。 -->
    <contextName>springboot-001-quickstart</contextName>
    <!-- 通过<property>定义的值会被插入到logger上下文中。定义变量后,可以使"${}"来使用变量     -->
    <property name="logback.path" value="d:/logs" />
    <property name="logback.level" value="INFO" />
    <property name="logback.additivity" value="true" />
    <!--格式化输出:%d表示日期,%t表示线程名,%-5p:级别从左显示5个字符宽度   %m:日志消息,%n是换行符--> 
    <property name="logback.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />    
    <!-- %d [%t] %-5p %c.%M[%L] - %m%n -->
    <!-- %d{yyyy-MM-dd HH:mm:ss} [%thread]  %-5level %logger{50} - %msg%n -->    

    <!-- 
        <appender>是<configuration>的子节点,是负责写日志的组件 
        <appender>有两个必要属性name和class。name指定appender名称,class指定appender的全限定名。
        ConsoleAppender:把日志添加到控制台,有以下子节点:
        <encoder>:对日志进行格式化。(具体参数稍后讲解 )
        <target>:字符串  System.out 或者 System.err    默认 System.out    
    -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <charset>UTF-8</charset>
            <layout class="ch.qos.logback.classic.PatternLayout">
                  <pattern>${logback.pattern}</pattern>
            </layout>
          </encoder>
    </appender>

    <!-- 
        FileAppender:把日志添加到文件,有以下子节点
         <file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
        <append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true。
        <encoder>:对记录事件进行格式化。
        <prudent>:如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false。    
     -->    
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${logback.path}/springboot-001-quickstart.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <charset>UTF-8</charset>
            <layout class="ch.qos.logback.classic.PatternLayout">
                  <pattern>${logback.pattern}</pattern>
            </layout>
          </encoder>
    </appender>
    
    <appender name ="ANSY_FILE" class= "ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> 
        <discardingThreshold >0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> 
        <queueSize>256</queueSize>
        <appender-ref ref ="FILE"/>
    </appender>
    
    <logger name="org.springframework" level="INFO"/>
    <logger name="org.apache" level="ERROR"/>
    <logger name="java.sql" level="ERROR"/> 
       
    <!-- 
        <root> 也是<loger>元素,但是它是根loger。只有一个level属性,应为已经被命名为"root" 
        level: 用来设置打印级别,大小写无关:TRACE < DEBUG < INFO < WARN < ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。 默认是DEBUG
        <loger>和<root>可以包含零个或多个<appender-ref>元素,标识这个引用的appender将会被添加到这个loger中。
    -->
    <root level="${logback.level}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ANSY_FILE" />
    </root>
</configuration>
 

2.在类中测试日志输出:AppConfig

package com.zxy.springbootquickstart.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
/**实现对于其他xml的配置与自定义需要扫描的文件或类,通常创建XXconfig;
 * 1.创建AppConfig类增加Configuration;
 * 2.Configuration是springframework即spring提供;
 * 3.使用此注解代表让整个spring容器识别此类,并且加载此类;
 * 4.可以理解为此类就是一个xml文件,被天然的引入到spring中;
 * @author zxy
 *
 */

@Configuration
@ComponentScan({"com.zxy.springBootquickstart.*"}) //全项目扫描加载
@PropertySource("classpath:my-config.properties") //加载指定的配置

public class AppConfig {
    /**
     * 1.数据源配置
     * 2.参数配置
     * 都可以直接写入此类
     */
    //使用日志输出
    private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);

    
    /**
     * 调用application.properties中自定义属性的方法有两种:
     * 1. 通过注解的形式(推荐)
     */
    @Value("${custom.group}")
    private String customGroup;
    
    @Value("${zxy.name}")
    private String name;
    @Value("${zxy.title}")
    private String title;
    @Value("${zxy.attr}")
    private int attr;
    
    /**
     * 读取自定义配置文件my-config.properties中zxy.dynamic属性值,
     * my-config.properties中zxy.dynamic是根据$zxy.dynamic$获取
     * pom.xml中的配置值:
     * <properties>
          <spring.profiles.active>dev</spring.profiles.active>
          <zxy.dynamic>2019-001</zxy.dynamic><!-- 自定义属性 -->
        </properties>
     */
    @Value("${zxy.dynamic}")
    private String dynamic;
    /**
     * 2.通过注入全局类方式
     */
    @Autowired
    private Environment environment;
    
    public void output() {
        System.out.println("通过@Value注解读取配置:"+this.customGroup);
        System.out.println("通过注入Environment对象读取配置:"+environment.getProperty("custom.team"));
        System.out.println("加载自己的配置文件内容:"+this.name+","+this.title+","+this.attr);
        LOGGER.info("加载自己的配置文件内容:{},{},{}", this.name,this.title,this.attr);
        System.out.println("加载自己的配置文件,动态获取pom里的参数:"+this.dynamic);
    }
}

输出结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值