nacos動態讀取 logback-spring.xml日志配置


一。nacos的使用

啟動nacos服務端,可以下載jar啟動或者自己下載源碼打包。瀏覽器訪問http://10.121.9.30:8848/nacos,賬號密碼:nacos/nacos

nacos遠程的common-service-dev.yml文件

spring:
  application:
    name: common-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xxxxxx:3306/smartpower_xny?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC 
    username: xxx
    password: xx@123456
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      minimum-idle: 5
      maximum-pool-size: 15
      auto-commit: true
      idle-timeout: 30000
      pool-name: SmartpowerHikariCP
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1

  redis:
    host: xxxx
    port: 6379
    database: 0
    timeout: 1800000
  # jpa:
    # show-sql: false
    # hibernate:
      # ddl-auto: update
    # database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    # database: mysql


server:
  port: 9002
  servlet:
    context-path: /

management:
  endpoints:
    web:
      exposure:
        include: "*"

logging:
  #file:
  #  name: logs/${spring.application.name}.log
  config: http://${spring.cloud.nacos.config.server-addr}/nacos/v1/cs/configs?group=DEFAULT_GROUP&tenant=${spring.cloud.nacos.config.namespace}&dataId=logback-spring.xml
  level:
    com.chint.smartpower.common.repository.dao: debug


mybatis-plus:
  mapper-locations: classpath*:/mapper/*.xml
  #實體掃描,多個package用逗號或者分號分隔
  typeAliasesPackage: com.chint.smartpower.common.repository.model
  configuration:
    #是否開啟自動駝峰命名規則
    map-underscore-to-camel-case: true
    #MyBatis 自動映射策略,通過該配置可指定 MyBatis 是否並且如何來自動映射數據表字段與對象的屬性,
    auto-mapping-behavior: full
    #打印SQL
    #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    #數據庫配置
    db-config:
      #主鍵   auto:自增
      id-type: auto

#枚舉類型當作基礎類型
mapper:
  enumAsSimpleType: true

pagehelper:
  helper-dialect: mysql
  #true時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最后一頁
  #false時,如果pageNum<1或pageNum>pages會返回空數據
  reasonable: false
  support-methods-arguments: true
  params: count=countsql

chint:
  swagger:
    enabled: true
    title: common中心
    description: common接口文檔
    version: 1.0
    base-package: com.chint.smartpower.common.controller

        nacos遠程的 logback-spring.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

    <!-- 在yaml配置添加logging.path: 配置文件路徑-->

    <!-- 屬性文件:在properties文件中找到對應的配置項 -->
    <springProperty scope="context" name="logging.path" source="logging.path" defaultValue="./logs" />
    <!-- nacos名字不要改動,不然會造成啟動報警告,Failed to rename context Context has been already given a name nacos
    原因:項目框架 集成logback 與nacos 自帶的logback 沖突, nacos的logback 已經先於 項目啟動-->
    <contextName>nacos</contextName>
    <property name="FILE_NAME" value="common-data" />
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出(配色):%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level) %cyan(%logger{50}) - %magenta(%msg) %n</pattern>
            <!--user:%X{userId}   :添加用戶信息,方便鏈路追蹤     可以在aop攔截時MDC.put("userId", 1);-->
            <!--<pattern>%yellow(%d{yyyy-MM-dd HH:mm:ss}) %red([%thread]) %highlight(%-5level)  user:%X{userId} %cyan(%logger{50}) - %magenta(%msg) %n</pattern>-->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--根據日志級別分離日志,分別輸出到不同的文件-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設置攔截的對象為INFO級別日志 -->
            <level>INFO</level>
            <!-- 當匹配到了INFO級別時,啟用該段配置 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 沒有匹配到INFO級別日志時,屏蔽該段配置 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n </pattern>
            <!--user:%X{userId}   :添加用戶信息,方便鏈路追蹤     可以在aop攔截時MDC.put("userId", 1);-->
            <!--<pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level user:%X{userId} %logger{50} - %msg%n </pattern>-->
            <charset>UTF-8</charset>
        </encoder>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--按時間保存日志 修改格式可以按小時、按天、月來保存-->
            <fileNamePattern>${logging.path}/${FILE_NAME}.info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--單個文件大小 注意:除了 %d 之外還有 %i。這兩個占位符都是強制要求的。在當前時間還沒有到達周期輪轉之前,日志文件達到了 maxFileSize 指定的大小,會進行歸檔,遞增索引從 0 開始-->
            <maxFileSize>10MB</maxFileSize>
            <!--保存時長-->
            <MaxHistory>90</MaxHistory>
            <!--總文件大小,使用此屬性必須配置MaxHistory,且MaxHistory第一優先級,totalSizeCap第二優先級-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            &lt;!&ndash;按時間保存日志 修改格式可以按小時、按天、月來保存&ndash;&gt;
            <fileNamePattern>${logging.path}/common-service.info.%d{yyyy-MM-dd}.log</fileNamePattern>
            &lt;!&ndash;保存時長&ndash;&gt;
            <MaxHistory>90</MaxHistory>
            &lt;!&ndash;文件大小&ndash;&gt;
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>-->
    </appender>

    <appender name="fileWarnLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 設置攔截的對象為INFO級別日志 -->
            <level>WARN</level>
            <!-- 當匹配到了WARN級別時,啟用該段配置 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 沒有匹配到WARN級別日志時,屏蔽該段配置 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--按時間保存日志 修改格式可以按小時、按天、月來保存-->
            <fileNamePattern>${logging.path}/${FILE_NAME}.warn.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--單個文件大小 注意:除了 %d 之外還有 %i。這兩個占位符都是強制要求的。在當前時間還沒有到達周期輪轉之前,日志文件達到了 maxFileSize 指定的大小,會進行歸檔,遞增索引從 0 開始-->
            <maxFileSize>10MB</maxFileSize>
            <!--保存時長-->
            <MaxHistory>90</MaxHistory>
            <!--總文件大小,使用此屬性必須配置MaxHistory,且MaxHistory第一優先級,totalSizeCap第二優先級-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 基於給定的臨界值來過濾事件。如果事件的級別等於或高於給定的臨界值,將拋棄 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!--滾動策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--路徑-->
            <fileNamePattern>${logging.path}/${FILE_NAME}.error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--單個文件大小 注意:除了 %d 之外還有 %i。這兩個占位符都是強制要求的。在當前時間還沒有到達周期輪轉之前,日志文件達到了 maxFileSize 指定的大小,會進行歸檔,遞增索引從 0 開始-->
            <maxFileSize>10MB</maxFileSize>
            <!--保存時長-->
            <MaxHistory>90</MaxHistory>
            <!--總文件大小,使用此屬性必須配置MaxHistory,且MaxHistory第一優先級,totalSizeCap第二優先級-->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <!--過濾器的配置在配置級別的基礎上過濾,即root標簽的配置級別。本例中,是對大於等於info級別的日志過濾-->
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileWarnLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
</configuration>

   

        本地項目中的bootstrap.yaml文件

server:
  port: 9002

spring:
  application:
    name: common-service

  main:
    allow-bean-definition-overriding: true #當遇到同樣名字的時候,是否允許覆蓋注冊

  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_HOST:10.121.9.30}:${NACOS_PORT:8848}
        group: DEV_GROUP
        namespace: ac38fa10-529c-43fc-967e-9e44860e19ba
      config:
        server-addr: ${NACOS_HOST:10.121.9.30}:${NACOS_PORT:8848}
        namespace: ac38fa10-529c-43fc-967e-9e44860e19ba
        group: DEV_GROUP
        file-extension: yml
        prefix: ${spring.application.name}
#多個配置文件可以用以下方式
#        ext-config[0]:
#          group: DEV_GROUP
#          data-id: logback-spring.xml
#          refresh: true
#        ext-config[1]:
#          group: DEV_GROUP
#          data-id: ${spring.application.name}-dev.yml
#          refresh: true

  profiles:
    active: dev

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM