logback.xml动态配置程序路径的操作

1.普通java程序

如下配置的logback.xml

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

  <property name="LOGS_HOME" value="/opt/program/app/logback-demo/logs"/>
  <!-- 该值由启动程序时候动态传入 -->
  <property name="SUB_LOG_HOME" value="" />
  <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} - %msg%n"/>
  <property name="LOG_CHARSET" value="UTF-8"/>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${LOG_PATTERN}</pattern>
      <charset>${LOG_CHARSET}</charset>
    </encoder>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo.log</file>
    <encoder>
      <pattern>${LOG_PATTERN}</pattern>
      <charset>${LOG_CHARSET}</charset>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo-%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>

  <appender name="ERRORFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo.error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOGS_HOME}/${SUB_LOG_HOME}/logback-demo-%d{yyyy-MM-dd}.error.log</fileNamePattern>
      <maxHistory>20</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${LOG_PATTERN}</pattern>
      <immediateFlush>true</immediateFlush>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <root level="info">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="FILE"/>
    <appender-ref ref="ERRORFILE"/>
  </root>

</configuration>

property标签由name和value组成,上边定义的name可以在下边通过${name}引用。

value的值可以直接在xml中写死,也可以通过程序启动时候通过jvm虚拟机参数配置来传入,比如此处是-DSUB_LOG_HOME=xxx。

idea中配置:

2.spring boot应用

spring boot应用中将logback-spring.xml放置在resources目录,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://ch.qos.logback/xml/ns/logback" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback http://ch.qos.logback/xml/ns/logback/logback.xsd"
        debug="true" scan="false" scanPeriod="30 seconds">

  <springProperty scope="context" name="logPath" source="logback.logPath"/>
  <springProperty scope="context" name="subLogPath" source="logback.subLogPath"/>

  <!--spring-boot-1.5.10.RELEASE.jar!/org/springframework/boot/logging/logback/defaults.xml-->
  <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="LOG_HOME" value="${logPath}"/>
  <!-- 该值由启动程序时候动态传入 -->
  <property name="SUB_LOG_HOME" value="${subLogPath}" />
  <property name="LOG_NAME" value="data-middleware-server-realtime"/>
  <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} %line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{25} %line - %msg%n"/>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    </encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.log-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
      <maxHistory>20</maxHistory>
      <maxFileSize>100MB</maxFileSize>
    </rollingPolicy>
    <encoder>
      <pattern>${FILE_LOG_PATTERN}</pattern>
      <immediateFlush>true</immediateFlush>
    </encoder>
  </appender>
  <appender name="ERRORFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.error.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <fileNamePattern>${LOG_HOME}/${SUB_LOG_HOME}/${LOG_NAME}.error.log-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
      <maxHistory>20</maxHistory>
      <maxFileSize>100MB</maxFileSize>
    </rollingPolicy>
    <encoder>
      <pattern>${FILE_LOG_PATTERN}</pattern>
      <immediateFlush>true</immediateFlush>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>ERROR</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>

  <appender name="REALTIME_IMPORT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_HOME}/${SUB_LOG_HOME}/import/${LOG_NAME}.log</file>
    <encoder>
      <pattern>${FILE_LOG_PATTERN}</pattern>
      <immediateFlush>true</immediateFlush>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_HOME}/${SUB_LOG_HOME}/import/${LOG_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>7</maxHistory>
    </rollingPolicy>
  </appender>

  <logger name="REALTIME_IMPORT_LOGGER" level="INFO" additivity="false">
    <appender-ref ref="REALTIME_IMPORT_APPENDER"/>
  </logger>

  <logger name="org.apache.zookeeper.ZooKeeper" level="WARN" additivity="true"></logger>
  <logger name="org.apache.zookeeper.ClientCnxn" level="WARN" additivity="true"></logger>

  <root level="DEBUG">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="FILE"/>
    <appender-ref ref="ERRORFILE"/>
  </root>
</configuration>

该配置文件中除了使用<property>还使用了<springProperty>其中source为引用的spring配置中的变量,比如此处是logback.logPath和logback.subLogPath这两个值的传入可以通过spring boot配置文件传入,也可以通过程序启动时候动态传入,比如--logback.subLogPath=xxx

补充:logback.xml 自动读取日志存储路径

文件的命名和加载顺序有关logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载

如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml

logback使用application.yml中的属性

使用springProperty才可使用application.yml中的值 可以设置默认值

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!--
  说明:
    1. 文件的命名和加载顺序有关
      logback.xml早于application.yml加载,logback-spring.xml晚于application.yml加载
      如果logback配置需要使用application.yml中的属性,需要命名为logback-spring.xml
    2. logback使用application.yml中的属性
      使用springProperty才可使用application.yml中的值 可以设置默认值
  -->
  <springProperty scope="context" name="logName" source="ruoyi.logPath" defaultValue="default"/>
  <property name="log.path" value="${logName}" />
  <!-- 日志存放路径 -->
<!--  <property name="log.path" value="D:/zmSmartClassroom/logs"/>-->
  <!--  <property name="log.path" value="/home/zmSmartClassroom/logs"/>-->
  <!-- 日志输出格式 -->
  <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
  <!-- 控制台输出 -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
  </appender>
  <!-- 系统日志输出 -->
  <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-info.log</file>
    <!-- 循环政策:基于时间创建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 日志最大的历史 60天 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 过滤的级别 -->
      <level>INFO</level>
      <!-- 匹配时的操作:接收(记录) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配时的操作:拒绝(不记录) -->
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
  <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-error.log</file>
    <!-- 循环政策:基于时间创建日志文件 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 日志文件名格式 -->
      <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 日志最大的历史 60天 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <!-- 过滤的级别 -->
      <level>ERROR</level>
      <!-- 匹配时的操作:接收(记录) -->
      <onMatch>ACCEPT</onMatch>
      <!-- 不匹配时的操作:拒绝(不记录) -->
      <onMismatch>DENY</onMismatch>
    </filter>
  </appender>
  <!-- 用户访问日志输出 -->
  <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/sys-user.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- 按天回滚 daily -->
      <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
      <!-- 日志最大的历史 60天 -->
      <maxHistory>60</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${log.pattern}</pattern>
    </encoder>
  </appender>
  <!-- 系统模块日志级别控制 -->
  <logger name="com.ruoyi" level="info"/>
  <!-- Spring日志级别控制 -->
  <logger name="org.springframework" level="warn"/>
  <root level="info">
    <appender-ref ref="console"/>
  </root>
  <!--系统操作日志-->
  <root level="info">
    <appender-ref ref="file_info"/>
    <appender-ref ref="file_error"/>
  </root>
  <!--系统用户操作日志-->
  <logger name="sys-user" level="info">
    <appender-ref ref="sys-user"/>
  </logger>
</configuration>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 详解slf4j+logback在java工程中的配置

    本文主要介绍一下slf4j+logback在java工程中的配置,面向的读者主要是已经对slf4j+logback有一定了解的同学,但是在文章开头也做了一些知识铺垫,下面咱们进入正题. 在介绍slf4j+logback配置之前,首先对日志组件logback进行介绍. (一)日志组件logback的介绍及配置使用方法 一.logback的介绍     Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classi

  • SpringBoot之LogBack配置详解

    LogBack 默认集成在 Spring Boot 中,是基于 Slf4j 的日志框架.默认情况下 Spring Boot 是以 INFO 级别输出到控制台. 它的日志级别是: ALL < TRACE < DEBUG < INFO < WARN < ERROR < OFF 配置 LogBack 可以直接在 application.properties 或 application.yml 中配置,但仅支持一些简单的配置,复杂的文件输出还是需要配置在 xml 配置文件中.配

  • 解决Spring boot整合mybatis,xml资源文件放置及路径配置问题

    网上各种解决方案,我试了好久,整合了几篇文章才凑出来,在这里分享一下,实在不想网友们在这里面绕圈子,毕竟,写代码的时间是愉快的,解决bug也是愉快的,但也是一直在bug里面绕圈子就不爽了. 亲自试验: 1) 我的mapper和xml是这样子放置的 2) 在.xml中namespace是这样的: 3) application.properties中mybatis.mapper-locations得这么配置到xml 4) 最后呢,你只要在pom.xml中build下这样配置 5) 按照我这种位置防止

  • 基于logback 实现springboot超级详细的日志配置

    前言 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用).其中性能最高的应该使 logback 了,而且 springboot 默认使用的也是 logback 日志,所以本篇将会详细的讲解 logback 的日志配置方案. 本篇主要内容如下: •logback 配置文件的构成 •如何将日志输出到文件 •如何按时间,按大小切分日志 •如何将让一个日志文件中只有

  • logback.xml动态配置程序路径的操作

    1.普通java程序 如下配置的logback.xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="LOGS_HOME" value="/opt/program/app/logback-demo/logs"/> <!-- 该值由启动程序时候动态传入 --> <property

  • 使用Logback日志保存到相对路径的操作

    说明 在使用Logback中需要保存输出日志,但是却在保存的时候路径出现问题 项目背景 1.Win7 2.Java Web + Tomcat 7.0(在D盘目录下) 3.Logback 1.1.7 案例一 Logback.xml文件配置 <!-- 路径名称 --> <property name="log.base" value="logs" /> <!-- 保存的文件名 --> <property name="lo

  • javaweb配置jsp路径映射操作

    访问放在WEB-INF文件夹下的jsp内容需要映射,例如:WEB-INF/views/GoToCloudstore4Bridge.jsp,在web.xml文件的</web-app之间添加如下代码: <servlet> <servlet-name>GoToCloudstore4Bridge</servlet-name> <jsp-file>/WEB-INF/views/GoToCloudstore4Bridge.jsp</jsp-file>

  • 在logback.xml中自定义动态属性的方法

    当使用logback来记录Web应用的日志时,我们通过在logback.xml中配置appender来指定日志输出格式及输出文件路径,这在一台主机或一个文件系统上部署单个实例没有问题,但是如果部署多个实例(比如通过容器的方式),多个实例同时往同一文件写日志可能就会引起问题.这时可以将每个实例的日志文件加以区分,如IP或UUID,或两者结合的形式.这其实就涉及如何在logback.xml中自定义动态属性的问题. 可以有4种方式来实现logback.xml中获取自定义变量值: 通过设置环境变量或传递

  • logback的使用和logback.xml详解(小结)

    一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能 二.logba

  • 基于Spring Boot的Logback日志轮转配置详解

    在生产环境下,日志是最好的问题调试和跟踪方法,因此日志的地位是十分重要的.我们平时经常使用的log4j,slf4j,logback等等,他们的配置上大同小异.这里就结合Spring Boot配置一下Logback的日志. 默认最简单的配置 默认情况下,如果对日志没有特殊处理,可以直接基于application.properties进行配置. 常用的参数有: logging.level 配置日志的级别 logging.file logging.path 这两个参数只能配置一个生效,一个是文件(可以

  • SpringBoot通过yml和xml文件配置日志输出方法

    SpringBoot中默认使用Logback进行日志输出,可以同时使用SpringBoot框架的配置文件application.yml或是通过logback的配置文件logback.xml进行配置. 通过application.yml配置 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 Lo

  • SpringBoot配置logback.xml 多环境的操作步骤

    前提 logback日志文件要实现springboot多环境配置,不然每次都需要修改logback.xml里面的配置文件,所以很麻烦. 操作步骤 1.resource文件的内容结构如下: 2.配置application.yml spring: profiles: active: dev logging: config: classpath:logback-${spring.profiles.active}.xml 3.配置lockback-dev.xml 这个地方就可以实现自己的多环境日志配置了

  • Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析

    本文实例讲述了Thinkphp 框架配置操作之动态配置.扩展配置及批量配置.分享给大家供大家参考,具体如下: 动态配置 设置格式: C('参数名称','新的参数值') 例如,我们需要动态改变数据缓存的有效期的话,可以使用 // 动态改变缓存有效期 C('DATA_CACHE_TIME',60); 动态配置赋值仅对当前请求有效,不会对以后的请求造成影响. 动态改变配置参数的方法和读取配置的方法在使用上面非常接近,都是使用C方法,只是参数的不同. 也可以支持二维数组的读取和设置,使用点语法进行操作,

  • 使用springboot+druid双数据源动态配置操作

    目录 一.yml配置 二.动态切换数据源配置文件 1.数据源db1 2.数据源db2 三.多数据源的mapper包最好是分开 四.代码中调用 总结 进行动态切换,需要在类里面配置,顺便解决mybatis-plus自带代码无法使用问题,直接上代码: 一.yml配置 数据源可以都是oracle的也可以一个是oracle一个是mysql的. spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource #多数据源1

随机推荐