01 springboot-整合日志(logback-config.xml)

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件,通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。

Logback 提供了丰富的配置选项,可以满足各种不同的日志需求。需要根据具体情况进行配置。

项目创建,及其springboot系列相关知识点详见:springboot系列


springboot系列,最近持续更新中,如需要请关注

如果你觉得我分享的内容或者我的努力对你有帮助,或者你只是想表达对我的支持和鼓励,请考虑给我点赞、评论、收藏。您的鼓励是我前进的动力,让我感到非常感激。

文章目录

  • 1 logback-config.xml详情
  • 1.1 多环境配置【不同的环境配置文件在一起】

1 logback-config.xml详情

1.1 多环境配置【不同的环境配置文件在一起】

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->
<configuration scan="true" scanPeriod="10 seconds"><!-- 日志名称,默认从取 spring.application.name --><springProperty name="contextName" source="spring.application.name"/><!-- 运行环境 --><springProperty name="envName" source="spring.profiles.active"/><!-- property:指定变量,name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义后,可以使“${}”来使用变量 --><!-- 日志存放目录,使用项目名,这样在多服务中,可以根据服务名分目录存储日志 --><property name="log.path" value="logs/${contextName}/logs"/><!--0. 日志格式和颜色渲染 --><!-- 彩色日志依赖的渲染类 --><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"/><!--控制台彩色日志格式日志解读:%clr([${contextName},${envName:-dev}]){yellow}:输出项目名称和项目使用环境(黄色)%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint}:输出日期,格式:yyyy-MM-dd HH:mm:ss.SSS%clr(%5p):输出日志格式。并对齐5位。如果是INFO、WARN这种四个字符的,默认在最左边加入一个空格(info为蓝色,warn为浅红,error为加粗红,debug为黑色)%clr(${PID:- }){magenta}:输出PID(品红色)。ps:${PID:- } 这个 ${} 使用方式表示,有PID则显示PID,没有则显示-[%15.15t]:输出线程名称。如果记录的线程字符长度小于15(第一个)则用空格在左侧补齐,如果字符长度大于15(第二个),则从开头开始截断多余的字符%clr(%-50.50(%logger{50})){cyan}%-50.50():如果记录的logger字符长度小于50(第一个)则用空格在右侧补齐,如果字符长度大于50(第二个),则从开头开始截断多余的字符%logger{50}:输出日志名字 一般采用日志所在类名或者包名做日志名{cyan}:输出颜色(青色)%msg%n":日志输出内容+换行(%n)--><property name="console.log.pattern"value="%clr([${contextName},${envName:-dev}]){yellow} %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID:- }){magenta} %clr(---){faint} [%15.15t] %clr(%-50.50(%logger{50})){cyan} : %msg%n"/><!--  文件日志格式。ps:日志文件中没有设置颜色,否则颜色部分会有ESC[0:39em等乱码- --><property name="log.pattern"value="[${contextName},${envName:-dev}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } --- [%15.15t] %-50.50(%logger{50}) : %msg%n"/><!--1. 输出到控制台--><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><Pattern>${console.log.pattern}</Pattern><!-- 设置字符集 --><charset>UTF-8</charset></encoder><target>System.out</target></appender><!--2. 输出到文档--><!-- 2.0 输入全部level日志 ,视项目需求而定,可删除--><appender name="allLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志输出路径、文件名 --><file>${log.path}/all.log</file><!--日志输出格式--><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><!--历史日志归档策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志: 归档文件名,分了目录的话,要加 aux 不然日志文件不能按时生成,%i表示序号,在这里不能少,因为如果当一个文件到了指定大小后,那就要按照%i来生成顺序下的另一个文件 --><!--保存日志策略 根据 %d{yyyy-MM-dd} 进行保存 %d{yyyy-MM-dd}:按天进行保存 %d{yyyy-MM-dd HH}:按小时进行保存--><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/all/all.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--单个文件的最大大小--><maxFileSize>100MB</maxFileSize><!-- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> --><!--     <maxFileSize>100MB</maxFileSize> --><!-- </timeBasedFileNamingAndTriggeringPolicy> --><!--日志文件保留天数--><maxHistory>7</maxHistory><!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志--><totalSizeCap>10GB</totalSizeCap></rollingPolicy></appender><!-- 2.1 level为 DEBUG 日志,时间滚动输出  --><appender name="debugLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志输出路径、文件名 --><file>${log.path}/debug.log</file><!--日志输出格式--><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><!--历史日志归档策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志: 归档文件名,分了目录的话,要加 aux 不然日志文件不能按时生成,%i表示序号,在这里不能少,因为如果当一个文件到了指定大小后,那就要按照%i来生成顺序下的另一个文件 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--单个文件的最大大小--><maxFileSize>100MB</maxFileSize><!--日志文件保留天数--><maxHistory>7</maxHistory><!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志--><totalSizeCap>10GB</totalSizeCap></rollingPolicy><!-- 此日志文档只记录debug级别的  level过滤器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>debug</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 2.2 level为 INFO 日志,时间滚动输出  --><appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志输出路径、文件名 --><file>${log.path}/info.log</file><!--日志输出格式--><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><!--历史日志归档策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志: 归档文件名,分了目录的话,要加 aux 不然日志文件不能按时生成,%i表示序号,在这里不能少,因为如果当一个文件到了指定大小后,那就要按照%i来生成顺序下的另一个文件 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/info/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--单个文件的最大大小--><maxFileSize>100MB</maxFileSize><!--日志文件保留天数--><maxHistory>7</maxHistory><!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志--><totalSizeCap>10GB</totalSizeCap></rollingPolicy><!-- 此日志文档只记录info级别的  level过滤器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>info</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 2.3 level为 WARN 日志,时间滚动输出  --><appender name="warnLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志输出路径、文件名 --><file>${log.path}/warn.log</file><!--日志输出格式--><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><!--历史日志归档策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志: 归档文件名,分了目录的话,要加 aux 不然日志文件不能按时生成,%i表示序号,在这里不能少,因为如果当一个文件到了指定大小后,那就要按照%i来生成顺序下的另一个文件 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/warn/warn.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--单个文件的最大大小--><maxFileSize>100MB</maxFileSize><!--日志文件保留天数--><maxHistory>7</maxHistory><!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志--><totalSizeCap>10GB</totalSizeCap></rollingPolicy><!-- 此日志文档只记录warn级别的  level过滤器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>warn</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 2.4 level为 ERROR 日志,时间滚动输出  --><appender name="errorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 当前日志输出路径、文件名 --><file>${log.path}/error.log</file><!--日志输出格式--><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><!--历史日志归档策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志: 归档文件名,分了目录的话,要加 aux 不然日志文件不能按时生成,%i表示序号,在这里不能少,因为如果当一个文件到了指定大小后,那就要按照%i来生成顺序下的另一个文件 --><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/error/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!--单个文件的最大大小--><maxFileSize>100MB</maxFileSize><!--日志文件保留天数--><maxHistory>7</maxHistory><!--用来指定日志文件的上限大小,到了这个值,就会删除旧的日志--><totalSizeCap>10GB</totalSizeCap></rollingPolicy><!-- 此日志文档只记录error级别的  level过滤器--><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>error</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><!-- 文件 异步日志(async) --><appender name="asyncAppLog" class="ch.qos.logback.classic.AsyncAppender"immediateFlush="false" neverBlock="true"><!-- 0:不丢失日志.20:如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold>0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>1024</queueSize><!-- 队列满了不阻塞调用者--><neverBlock>true</neverBlock><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref="allLog"/></appender><!--由于队列中还会有没有打印的日志内容,因此需要等待一段时间,等待队列处理完毕。单位是ms。如果队列较大,队列内容较多,可以将此值设置的较大。如果超过此时间队列中的日志还没有处理完毕,则队列中的日志将抛弃--><shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"><delay>2000</delay></shutdownHook><!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender><logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。name:用来指定受此logger约束的某一个包或者具体的某一个类。level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前logger将会继承上级的级别。addtivity:是否向上级logger传递打印信息。默认是true<logger name="org.springframework.web" level="info"/><logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>--><!--root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能设置为INHERITED或者同义词NULL。默认是DEBUG可以包含零个或多个元素,标识这个appender将会添加到这个logger。--><!-- 4. 最终的策略 可根据环境分别制定不同的日志策略。注意,这里的 allLog 没在root中声明,在上面的 asyncAppLog 声明(异步处理)--><!-- 4.1 开发环境:打印控制台,可把其他打印到文件的<appender-ref>注释 --><springProfile name="dev"><root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="debugLog"/><appender-ref ref="infoLog"/><appender-ref ref="warnLog"/><appender-ref ref="errorLog"/><appender-ref ref="asyncAppLog"/></root></springProfile><!-- 4.2 生产环境:输出到文档<springProfile name="pro"><root level="info"><appender-ref ref="CONSOLE"/><appender-ref ref="debugLog"/><appender-ref ref="infoLog"/><appender-ref ref="warnLog"/><appender-ref ref="errorLog"/><appender-ref ref="asyncAppLog"/></root></springProfile> --></configuration>

注:
上面配置不指定“Profile”时日志没办法输出,需要通过如下方式指定
在这里插入图片描述
另外,多环境配置,可以分开配置
在这里插入图片描述
pom配置多环境

    <!-- 多环境配置【开始】 --><profiles><!-- 开发环境环境 --><profile><id>dev</id><properties><package.environment>dev</package.environment></properties><!-- 是否默认 true表示默认--><activation><activeByDefault>true</activeByDefault></activation></profile><!-- 测试环境 --><profile><id>test</id><properties><package.environment>test</package.environment></properties></profile><profile><!-- 生产环境 --><id>prod</id><properties><package.environment>prod</package.environment></properties></profile></profiles><!-- 多环境配置【结束】 -->

1.2 单环境部署

<?xml version="1.0" encoding="UTF-8"?>  <!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->  
<!-- 日志输出规则  根据当前ROOT 级别,日志输出时,级别高于root默认的级别时  会输出 -->  
<!-- 以下  每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->  <!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。   debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false-->  
<configuration scan="true" scanPeriod="60 seconds" debug="false">  <!-- 定义日志文件 输入位置 -->  <property name="log_dir" value="/logs/ev_cmdb" />  <!-- 日志最大的历史 30-->  <property name="maxHistory" value="30"/>  <!-- ConsoleAppender 控制台输出日志 -->  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  <!-- 对日志进行格式化 -->  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger -%msg%n</pattern>  </encoder>  </appender>  <!-- ERROR级别日志 -->  <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender-->  <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录WARN级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>ERROR</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!--日志输出位置  可相对、和绝对路径 -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/error-log.log</fileNamePattern>  <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>6,  则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <!-- 按照固定窗口模式生成日志文件,当文件大于20MB时,生成新的日志文件。窗口大小是13,当保存了3个归档文件后,将覆盖最早的日志。   <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">     <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/.log.zip</fileNamePattern>     <minIndex>1</minIndex>     <maxIndex>3</maxIndex>     </rollingPolicy>   -->  <!-- 查看当前活动文件的大小,如果超过指定大小会告知RollingFileAppender 触发当前活动文件滚动   <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">     <maxFileSize>5MB</maxFileSize>     </triggeringPolicy>   -->  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- WARN级别日志 appender -->  <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录WARN级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>WARN</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 按天回滚 daily -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/warn-log.log  </fileNamePattern>  <!-- 日志最大的历史 60-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- INFO级别日志 appender -->  <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录INFO级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>INFO</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 按天回滚 daily -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/info-log.log  </fileNamePattern>  <!-- 日志最大的历史 60-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- DEBUG级别日志 appender -->  <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录DEBUG级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>DEBUG</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 按天回滚 daily -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/debug-log.log  </fileNamePattern>  <!-- 日志最大的历史 60-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <!-- TRACE级别日志 appender -->  <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">  <!-- 过滤器,只记录ERROR级别的日志 -->  <filter class="ch.qos.logback.classic.filter.LevelFilter">  <level>TRACE</level>  <onMatch>ACCEPT</onMatch>  <onMismatch>DENY</onMismatch>  </filter>  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  <!-- 按天回滚 daily -->  <fileNamePattern>${log_dir}/%d{yyyy-MM-dd}/trace-log.log  </fileNamePattern>  <!-- 日志最大的历史 60-->  <maxHistory>${maxHistory}</maxHistory>  </rollingPolicy>  <encoder>  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>  </encoder>  </appender>  <logger name="java.sql.PreparedStatement" value="DEBUG" />    <logger name="java.sql.Connection" value="DEBUG" />    <logger name="java.sql.Statement" value="DEBUG" />    <logger name="com.ibatis" value="DEBUG" />    <logger name="com.ibatis.common.jdbc.SimpleDataSource" value="DEBUG" />    <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>    <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" value="DEBUG" />    <!-- root级别   DEBUG -->  <root level="debug">  <!-- 控制台输出 -->  <appender-ref ref="STDOUT" />  <!-- 文件输出 -->  <appender-ref ref="ERROR" />  <appender-ref ref="INFO" />  <appender-ref ref="WARN" />  <appender-ref ref="DEBUG" />  <appender-ref ref="TRACE" />  </root>  
</configuration>  

2 开发案例

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter><encoder class="com.huawei.titan.security.sdk.runlog.encoder.SecurityLayoutEncoder"><pattern>%date [%thread] %highlight(%-5level) [%magenta(%logger{500})] - %msg%n</pattern></encoder></appender><appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter><File>/opt/titan/logs/log/algorithmscheduleservice.log</File><rollingPolicy class="com.huawei.titan.security.sdk.runlog.rolling.SecuritySizeAndTimeBasedRollingPolicy"><fileNamePattern>/opt/titan/logs/log/algorithmscheduleservice-%d{yyyyMMdd}.%i.log.zip</fileNamePattern><maxFileSize>10MB</maxFileSize><maxHistory>10</maxHistory><totalSizeCap>200MB</totalSizeCap></rollingPolicy><encoder class="com.huawei.titan.security.sdk.runlog.encoder.SecurityLayoutEncoder"><pattern>%date [%thread] %highlight(%-5level) [%magenta(%logger{500})] - %msg%n</pattern></encoder></appender><!-- 开发本地环境. --><springProfile name="local"><logger name="com.huawei.titan.algorithmscheduleservice" additivity="false" level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="LOG_FILE"/></logger><logger name="com.huawei.security.validator.log.WSFValidatorLog" level="OFF"><appender-ref ref="LOG_FILE"/></logger><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="LOG_FILE"/></root></springProfile><!-- 开发验证环境和测试环境 --><springProfile name="dev,test,security"><logger name="com.huawei.titan.algorithmscheduleservice" additivity="false" level="DEBUG"><appender-ref ref="LOG_FILE"/></logger><root level="INFO"><appender-ref ref="LOG_FILE"/></root></springProfile><!-- 集成测试环境 --><springProfile name="sit,pro"><root level="INFO"><appender-ref ref="LOG_FILE"/></root><logger name="com.xxxx" level="OFF"><appender-ref ref="LOG_FILE"/></logger></springProfile><!-- 修改参数校验的日志输出级别,大量的无用校验日志,影响问题定位 --><logger name="com.xxxx" level="ERROR" additivity="true"></logger><!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 --><root level="DEBUG"><appender-ref ref="STDOUT"/></root></configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456924.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx、Tomcat等项目部署问题及解决方案详解

目录 前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的常见原因 2. 端口开启问题2.1 Windows环境下的端口开放2.2 Linux环境下的端口开放 3. 重视日志分析3.1 Nginx日志分析3.2 Tomcat日志分析 4. 开发环境与部署后运行结果不同4.1 开发环境与生产…

redis的配置文件解析

我的后端学习大纲 我的Redis学习大纲 1.1.Redis的配置文件&#xff1a; 1.Redis的配置文件名称是&#xff1a;redis.conf 2.在vim这个配置文件的时候&#xff0c;默认是不显示行号的&#xff0c;可以编辑下面这个文件&#xff0c;末尾加上set nu&#xff0c;就会显示行号: 1.…

kafka 如何减少数据丢失?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列&#xff0c;广泛用…

初探Vue前端框架

文章目录 简介什么是Vue概述优势MVVM框架 Vue的特性数据驱动视图双向数据绑定指令插件 Vue的版本版本概述新版本Vue 3Vue 3新特性UI组件库UI组件库概述常用UI组件库 安装Vue安装Vue查看Vue版本 实例利用Vue命令创建Vue项目切换工作目录安装vue-cli脚手架创建Vue项目启动Vue项目…

Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端

一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统计 java -jar doc/jacoc…

提升数据处理效率:TDengine S3 的最佳实践与应用

在当今数据驱动的时代&#xff0c;如何高效地存储与处理海量数据成为了企业面临的一大挑战。为了解决这一问题&#xff0c;我们在 TDengine 3.2.2.0 首次发布了企业级功能 S3 存储。这一功能经历多个版本的迭代与完善后&#xff0c;逐渐发展成为一个全面和高效的解决方案。 S3…

vue计算属性报错:Computed property “energyTotal“ was assigned to but it has no setter.

我页面中的应用 <el-input-number v-model"energyTotal" placeholder"请输入" disabled class"" :precision"2" :max"100000000" :controls"false"></el-input-number>computed:{carbonTotal(){/*…

ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库

安装nvm 首先安装必要的工具&#xff1a; apt update apt install curl下载并执行nvm安装脚本&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash添加环境变量&#xff08;如果安装脚本没有自动添加&#xff09;。编辑 ~/.bash…

Python爬虫教程:从入门到精通

Python爬虫教程&#xff1a;从入门到精通 前言 在信息爆炸的时代&#xff0c;数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言&#xff0c;因其丰富的库和框架&#xff0c;成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

【Qt聊天室客户端】聊天界面功能

1. 发送消息 1.1 实现逻辑分析 发送消息的具体实现&#xff0c;通过输入框右下角的发送按钮输入框中发送的内容&#xff0c;通过网络传输给服务器客户端&#xff0c;发送消息成功后&#xff0c;消息展示区中要显示刚刚发送出去的消息 1.2 具体实现 消息输入区域设置信号槽处…

Cout输出应用举例

Cout输出应用 在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <sstream> #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和res…

Unity2D 人物爬楼梯

unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 &#xff0c;相关视频&#xff1a;寻路算法 在unity3d 中的演示&am…

05方差分析续

文章目录 1.Three way ANOVA2.Latin square design2.Hierarchical (nested) ANOVA3.Split-plot ANOVA4.Repeated measures ANOVA5.Mixed effect models 1.Three way ANOVA 三因素相关分析 单因子分析的代码 data(mtcars) nrow(mtcars) # 32 mtcars$cyl as.factor(mtcars$cyl…

【永中软件-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取&#xff0c;每次向数据库建立连接的时候都要将 Connection加载到内存中&#xff0c;再验证用户名和密码(得花费0.05s&#xff5e;1s的时间)。需要数据库连接的时候&#xff0c;就向数据库要求 一个&#xff0c;执行完成后再断…

【微服务】Java 对接飞书多维表格使用详解

目录 一、前言 二、前置操作 2.1 开通企业飞书账户 2.2 确保账户具备多维表操作权限 2.3 创建一张测试用的多维表 2.4 获取飞书开放平台文档 2.5 获取Java SDK 三、应用App相关操作 3.1 创建应用过程 3.2 应用发布过程 3.3 应用添加操作权限 四、多维表应用授权操作…

语音识别——使用Vosk进行语音识别

文章目录 前言一、Vosk模型1.准备好所需要的语音包2.下载使用 二、使用示例1.文件读取示例2.结合麦克风演示 总结 前言 如何编译Vosk请参照之前的文章&#xff0c;ubuntu编译kaldi和vosk Vosk是语音识别开源框架&#xff0c;支持二十种语言 - 中文&#xff0c;英语&#xff0…

使用Prometheus对微服务性能自定义指标监控

背景 随着云计算和容器化技术的不断发展&#xff0c;微服务架构逐渐成为现代软件开发的主流趋势。微服务架构将大型应用程序拆分成多个小型、独立的服务&#xff0c;每个服务都可以独立开发、部署和扩展。这种架构模式提高了系统的可伸缩性、灵活性和可靠性&#xff0c;但同时…

大数据-190 Elasticsearch - ELK 日志分析实战 - 配置启动 Filebeat Logstash

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

语音语言模型最新综述! 关于GPT-4o背后技术的尝试

近期,大型语言模型(LLMs)在生成文本和执行各种自然语言处理任务方面展现出了卓越的能力,成为了强大的AI驱动语言理解和生成的基础模型。然而&#xff0c;仅依赖于基于文本模态的模型存在显著局限性。这促使了基于语音的生成模型的发展,使其能够更自然、直观地与人类互动。 为了…