spring-logback引用外部文件

打印 上一主题 下一主题

主题 1049|帖子 1049|积分 3147

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
配景

        在spring微服务开发和云摆设中,都涉及到日志的收集,很多时间为例方便管理和开发,很多公司都会开发一些基础配置代码。其中日志就是很重要的部分,
        为了方便摆设、收集、查看,以是日志文件必要存储在同一个目次下,且日志格式必须是雷同的。
        但是在微服务开发中,如果每个服务都自己创建的logback-spring.xml文件并配置信息,难免会出现错误大概遗漏的地方。以是必要统一的logback-spring.xml配置,但是由于某些必要,可能服务又会有自己独特的日志文件记载。以是必要日志打印不能请控制,必须未服务留有肯定的自主控制。
原理

        基于以上的要求,使用logback配置文件的继承方式,既可以统一必要的日志的打印存储方式,又可以在肯定水平上给与服务自主开发的空间。
        由于必要引入springboot的一些配置项,以是我们使用spring-logback.xml配置。由于加载顺序:logback.xml > application.properties/application.yaml > logback-spring.xml
logback的引用实现

        logback引入其他的配置项使用<included></included> 和 <include></include> 来实现。
从文件中包罗
  1. <include file="src/main/java/com/xxxx/configuration/includedConfig.xml"/>
复制代码
特别留意一点 :logback-include.xml 在 maven 中 , 不能直接放在 src/resouces 路径下 。
如许的情况就是 , logback-include.xml 在 jar 的根路径中 , 但不是跟 logback.xml 同一目次 . 在没有路径的情况下 , 默认只会去找同目次下的文件 . 就找不到jar包里的了 。
   <!-- logback.xml -->
  <configuration>
          <!-- 这么配置 , 只会找同目次下的文件 -->
          <include resource="logback-include.xml" />
  </configuration>
  从 classpath 中包罗
  1. <include resource="includedConfig.xml"/>
复制代码
从 URL 中包罗
  1. <include url="http://some.host.com/includedConfig.xml"/>
复制代码
如果包罗不乐成,那么 logback 会打印出一条警告信息,如果不盼望 logback 抱怨,只需如许做:
  1. <include optional="true" ..../>
复制代码
实现方式 

公共基础配置

        先新建一个基础配置模块,这个模块将被打成jar包,并在其他项目中被引用,这个项目中包括了基础的日志配置,配置信息如下:
logback-base.xml
  1. <included>
  2.     <contextName>${APPLICATION_NAME}</contextName>
  3.     <springProperty name="APPLICATION_NAME" scope="context" source="spring.application.name" defaultValue="core-logback-base"/>
  4.     <springProperty name="LOG_PATH" scope="context" source="logging.file" defaultValue="./log/application/${SERVICE_NAME}"/>
  5.     <springProperty name="LOG_MAX_FILE_SIZE" scope="context" source="logback.file.size" defaultValue="50MB"/>
  6.     <springProperty name="LOG_FILE_MAX_TIME" scope="context" source="logback.file.maxTime" defaultValue="24"/>
  7.     <springProperty name="LOG_FILE_TIME_FORMAT" scope="context" source="logback.file.timeFormat" defaultValue="yyyy-MM-dd'T'HH"/>
  8.     <springProperty name="ServerIP" scope="context" source="spring.cloud.client.ip-address" defaultValue="0.0.0.0"/>
  9.     <springProperty name="ServerPort" scope="context" source="server.port" defaultValue="0000"/>
  10.     <property name="SERVICE_NAME" value="${APPLICATION_NAME}"/>
  11.     <property name="LOG_PATTERN" value="[${SERVICE_NAME}] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{30}: %line - %msg %n"/>
  12.     <appender name ="InfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
  13.         <!--指定日志路径和名称-->
  14.         <file>${LOG_PATH}/${SERVICE_NAME}-info.log</file>
  15.         <!--是否使用追加日志的方式-->
  16.         <append>true</append>
  17.         <!--级别过滤器,只打印指定级别的日志-->
  18.         <filter class="ch.qos.logback.classic.filter.LevelFilter">
  19.             <level>INFO</level>
  20.             <onMatch>ACCEPT</onMatch>
  21.             <onMismatch>DENY</onMismatch>
  22.         </filter>
  23.         <!-- 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名 -->
  24.         <!--SizeAndTimeBasedRollingPolicy 它根据时间来制定滚动策略,也限制每个文件的大小,既负责滚动也负责出发滚动-->
  25.         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  26.             <!--每天生成一个日志文件,保存maxHistory天的日志文件-->
  27.             <!--<fileNamePattern>${LOG_PATH}/rollingFileAppender.%d{yyyy-MM-dd}.log</fileNamePattern>-->
  28.             <!--每个分钟生成一个日志文件,保存maxHistory小时的日志文件-->
  29.             <!--<fileNamePattern>${LOG_PATH}/rollingFileAppender.%d{yyyy-MM-dd'T'HH}.-%i.log</fileNamePattern>-->
  30.             <!--每个小时生成一个日志文件,保存maxHistory分钟的日志文件,并且将及时日志文件进行压缩zip-->
  31.             <fileNamePattern>${LOG_PATH}/${SERVICE_NAME}.info.%d{${LOG_FILE_TIME_FORMAT}}.log%i.zip</fileNamePattern>
  32.             <!--限制每一个log文件的大小-->
  33.             <maxFileSize>100MB</maxFileSize>
  34.             <maxHistory>${LOG_FILE_MAX_TIME}</maxHistory>
  35.         </rollingPolicy>
  36.         <encoder>
  37.             <!--日志格式-->
  38.           <pattern>${LOG_PATTERN}</pattern>
  39.         </encoder>
  40.     </appender>
  41.     <appender name ="ErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
  42.         <!--指定日志路径和名称-->
  43.         <file>${LOG_PATH}/${SERVICE_NAME}-error.log</file>
  44.         <!--是否使用追加日志的方式-->
  45.         <append>true</append>
  46.         <!--级别过滤器,只打印指定级别的日志-->
  47.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  48.             <level>ERROR</level>
  49.         </filter>
  50.         <!-- 当发生滚动时,决定RollingFileAppender的行为,涉及文件移动和重命名 -->
  51.         <!--SizeAndTimeBasedRollingPolicy 它根据时间来制定滚动策略,也限制每个文件的大小,既负责滚动也负责出发滚动-->
  52.         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  53.             <!--每天生成一个日志文件,保存maxHistory天的日志文件-->
  54.             <!--<fileNamePattern>${LOG_PATH}/rollingFileAppender.%d{yyyy-MM-dd}.log</fileNamePattern>-->
  55.             <!--每个分钟生成一个日志文件,保存maxHistory小时的日志文件-->
  56.             <!--<fileNamePattern>${LOG_PATH}/rollingFileAppender.%d{yyyy-MM-dd'T'HH}.-%i.log</fileNamePattern>-->
  57.             <!--每个小时生成一个日志文件,保存maxHistory分钟的日志文件,并且将及时日志文件进行压缩zip-->
  58.             <fileNamePattern>${LOG_PATH}/${SERVICE_NAME}.error.%d{${LOG_FILE_TIME_FORMAT}}.log%i.zip</fileNamePattern>
  59.             <!--限制每一个log文件的大小-->
  60.             <maxFileSize>100MB</maxFileSize>
  61.             <maxHistory>24</maxHistory>
  62.         </rollingPolicy>
  63.         <encoder>
  64.             <!--日志格式-->
  65.       <pattern>${LOG_PATTERN}</pattern>
  66.      </encoder>
  67.     </appender>
  68.     <root level ="INFO">
  69.         <appender-ref ref="InfoLog" level ="INFO"/>
  70.         <appender-ref ref="ErrorLog" level ="ERROR"/>
  71.     </root>
  72. </included>
复制代码
 位置不要放在resources下,必要放在java目次或其子目次下,假设起路径是:
   com/test/core/log/xml/logback-base.xml
  引用基础配置

在其他的项目中,我们可以通过maven方式引入公共基础配置的jar包。然后在项目标resources新建logback-spring.xm引入基础配置,并加入自己的配置项。
  1. <configuration scan="true" scanPeriod="60 seconds" debug="false">
  2.     <include resource="com/test/core/log/xml/logback-base.xml"/>
  3.     <!--输出到控制台-->
  4.     <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  5.         <encoder>
  6.             <pattern>${LOG_PATTERN}</pattern>
  7.         </encoder>
  8.     </appender>
  9.     <root level ="INFO">
  10.         <!-- 控制台打印方式 -->
  11.         <appender-ref ref="CONSOLE" level="INFO"/>
  12.     </root>
  13. </configuration>
复制代码
同时在application.properties或application.yaml中配置日志文件方式:
   logging.config=classpath:logback.xml
  如许就完成了所有配置。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表