当前位置: 首页 > news >正文

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>

相关文章:

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

logback-config.xml 是一个用于配置 Logback 日志框架的 XML 文件&#xff0c;通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项&#xff0c;可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建&#xff0…...

Java最全面试题->计算机基础面试题->计算机网络面试题

计算机网络 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层&#xff…...

VSCode编译器改为中文

1. 通过快捷键设置中文 打开命令面板&#xff1a;按住键盘上的CtrlShiftP组合键&#xff0c;打开命令面板。 输入并设置语言&#xff1a;在命令面板中输入Configure Display Language。 点击Configure Display Language选项。 在弹出的语言选择列表中&#xff0c;选择zh-cn…...

前端开发设计模式——状态模式

目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构&#xff1a; 2.原理&#xff1a; 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态&#xff1a; 2.页面加载状态&#xff1a; 3.用户登录状态&#xff1a; 五、状态模式的优点 1.提…...

特种作业操作烟花爆竹试题分享

1.&#xff08;单选题&#xff09;职业卫生研究的是人类从事各种职业劳动过程中的&#xff08; &#xff09;。 A.健康问题 B.环境问题 C.卫生问题 答案:C 2.&#xff08;单选题&#xff09;安全生产事关人民群众的&#xff08; &#xff09;安全&#xff0c;事关改革发展和…...

实现prometheus+grafana的监控部署

直接贴部署用的文件信息了 kubectl label node xxx monitoringtrue 创建命名空间 kubectl create ns monitoring 部署operator kubectl apply -f operator-rbac.yml kubectl apply -f operator-dp.yml kubectl apply -f operator-crd.yml # 定义node-export kubectl app…...

确保Spring Boot定时任务只执行一次方案

在Spring Boot项目中&#xff0c;确保定时任务只执行一次是一个常见的需求。这种需求可以通过多种方式来实现&#xff0c;以下是一些常见的方法&#xff0c;它们各具特点&#xff0c;可以根据项目的实际需求来选择最合适的方法。 1. 使用Scheduled注解并设置极大延迟 一种简单…...

【Python数据可视化】利用Matplotlib绘制美丽图表!

【Python数据可视化】利用Matplotlib绘制美丽图表&#xff01; 数据可视化是数据分析过程中的重要步骤&#xff0c;它能直观地展示数据的趋势、分布和相关性&#xff0c;帮助我们做出明智的决策。在 Python 中&#xff0c;Matplotlib 是最常用的可视化库之一&#xff0c;它功能…...

【最新通知】2024年Cisco思科认证CCNA详解

CCNA现在涵盖安全性、自动化和可编程性。该计划拥有一项涵盖IT职业基础知识的认证&#xff0c;包括一门考试和一门培训课程&#xff0c;助您做好准备。 CCNA培训课程和考试最近面向最新技术和工作岗位进行了重新调整&#xff0c;为您提供了向任何方向发展事业所需的基础。CCNA认…...

监控内容、监控指标、监控工具大科普

在现代信息技术领域&#xff0c;监控技术扮演着至关重要的角色。它帮助我们实时了解系统、网络、应用以及环境的状态&#xff0c;确保它们的安全、稳定和高效运行。以下是对监控内容、监控指标和监控工具的详细科普。 一、监控内容 监控内容是指监控系统所关注和记录的具体信…...

生成文件夹 - python 实现

生成文件夹保存图片和文本等信息。 代码具体实现如下&#xff1a; #-*-coding:utf-8-*- # date:2021-04-13 # Author: DataBall - XIAN # Function: 生成文件夹import os if __name__ "__main__":path "./dataset"if not os.path.exists(path): # 如果…...

快速了解学会python基础语言及IDLE 提供的常用快捷键

&#x1f600;前言 本篇博文是关于python的基础语言介绍及IDLE 提供的常用快捷键&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…...

【python】OpenCV—Sort the Point Set from Top Left to Bottom Right

文章目录 1、功能描述2、代码实现3、效果展示4、更多例子5、参考 1、功能描述 给出一张图片&#xff0c;里面含有各种图形&#xff0c;取各种图形的中心点&#xff0c;从左到右从上到下排序 例如 2、代码实现 import cv2 import numpy as npdef process_img(img):img_gray c…...

LeetCode 1493.删掉一个元素以后全为1的最长子数组

题目&#xff1a; 给你一个二进制数组 nums &#xff0c;你需要从中删掉一个元素。 请你在删掉元素的结果数组中&#xff0c;返回最长的且只包含 1 的非空子数组的长度。 如果不存在这样的子数组&#xff0c;请返回 0 。 思路&#xff1a;不定长滑动窗口&#xff0c;将问题…...

php常用设计模式之工厂模式

引言 在日常开发中&#xff0c;我们一些业务场景需要用到发送短信通知。然而实际情况考虑到不同厂商之间的价格、实效性、可能会出现的情况等 我们的业务场景往往会接入多个短信厂商来保证我们业务的正常运行&#xff0c;而不同的短信厂商&#xff08;如阿里云短信、腾讯云短信…...

通用软件版本标识

软件版本标识&#xff1a;了解不同的版本类型 在软件开发和发布过程中&#xff0c;版本号和标识扮演着重要的角色。它们不仅帮助开发者追踪软件的演变&#xff0c;还让用户了解软件的稳定性和功能。以下是一些常见的软件版本标识&#xff0c;以及它们的含义和用途。 Alpha&am…...

(计算机毕设)基于SpringBoot的就业平台开题报告

一、立题依据(国内外研究进展或选题背景、研究意义等) 国内外研究进展或选题背景 在全球化的大背景下&#xff0c;就业问题一直是各国政府和社会各界关注的焦点。随着互联网技术的普及和发展&#xff0c;网络招聘已成为求职者和企业招聘的主要渠道。据相关数据显示&#xff0…...

STM32G4系列MCU的ADC模块标定方法和采样时间

目录 概述 1 ADC模块标定 1.1 功能介绍 1.2 软件程序校准ADC 1.2.1 标定步骤 1.2.2 标定时序框图 1.3 软件程序重新注入校准因子到ADC 1.3.1 标定步骤 1.3.2 更新ADC校准因子 1.4 用单个ADC转换单端和差分模拟输入 1.4.1 标定流程 1.4.2 混合单端和差分通道 2 通道…...

NVIDIA Jetson支持的神经网络加速的量化平台

NVIDIA Jetson支持的神经网络加速的量化工具、技术 NVIDIA Jetson 是专为边缘计算和嵌入式系统设计的高性能计算平台&#xff0c;它支持多种深度学习模型的部署和推理。对于神经网络加速的量化平台&#xff0c;Jetson 支持以下技术和工具&#xff1a; TensorRT&#xff1a;Ten…...

MySQL 免密登录的几种配置方式

文章目录 MySQL 免密登录的几种配置方式使用操作系统用户实现免密登录具体步骤&#xff1a;Step 1: 修改 MySQL 配置文件Step 2: 重启 MySQL 服务Step 3: 使用系统用户登录 MySQL优点&#xff1a;缺点&#xff1a; 使用 mysql_config_editor 配置免密文件具体步骤&#xff1a;S…...

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…...

ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)

关注这个工具的其它相关内容&#xff1a;自动化信息收集工具 —— ARL 灯塔使用手册 - CSDN 博客 灯塔&#xff0c;全称&#xff1a;ARL 资产侦察灯塔系统&#xff0c;有着域名资产发现和整理、IP/IP 段资产整理、端口扫描和服务识别、WEB 站点指纹识别、资产分组管理和搜索等等…...

抖音列表页采集-前言

准备工作&#xff1a; 1.关于selenium介绍&#xff1a; python自动化入门的话&#xff0c;selenium绝对是最方便的选择&#xff0c;基本逻辑即为&#xff1a;程序模拟人的行为操作浏览器&#xff0c;这样的操作需要借用浏览器驱动&#xff0c;我选用的是chrome浏览器&#xff…...

Linux 端口占用 kill被占用的端口 杀掉端口

1、yum install lsof 2、输入netstat -tln,查看系统当前所有被占用端口 3、根据端口查询进程,输入lsof -i :9555,切记不要忘了添加冒号 4、 既然知道进程号了,那杀死当前进程就简单多了,直接 kill -9 PID 回车...

爬虫之数据解析

数据解析 数据解析这篇内容, 很多知识涉及到的都是以前学习过的内容了, 那这篇文章我们主要以实操为主, 来展开来讲解关于数据解析的内容。 360搜索图片 请求的url大家不需要再找了, 相信大家都会找请求了, 寻找请求从我的第一篇爬虫的博客开始到现在一直都在写,这边的话, 我已…...

本地缓存少更改、小数据、低一致表的思考

对于那些少更改、小数据的表&#xff0c;以及对一致性要求不高的业务&#xff0c;其实完全可以通过本地缓存将表数据缓存到本地内存中&#xff0c;然后通过定时机制拉取表更新数据 直接从内存中获取数据&#xff0c;将会使得查询性能得到巨大的提升&#xff0c;并且由于更改少…...

redis 使用

打开redis 前台启动 同路径下打开redis-server 出现窗口&#xff0c;即启动成功 此时关闭窗口&#xff0c;redis关闭&#xff1b; 不管有没有使用密码&#xff0c;或者使用了什么密码&#xff0c;都能连上 如果使用下文提到的redis cli增加密码&#xff0c;就只能使用你设置的…...

使用 Pake 一键打包网页为桌面应用 / 客户端

项目 项目&#xff1a;https://github.com/tw93/Pake/ 免费ICO图片&#xff1a;https://icon-icons.com/zh/ 设置环境 以下教程仅针对windows系统适用 请确保您的 Node.js 版本为 18 或更高版本 文档&#xff1a;https://v1.tauri.app/zh-cn/v1/guides/getting-started/prerequ…...

vue.js【常用UI组件库】

Element Plus组件库 Element Plus是基于Vue 3开发的优秀的PC端开源UI组件库&#xff0c;它是Element的升级版&#xff0c;对于习惯使用Element的人员来说&#xff0c;在学习Element Plus时&#xff0c;不用花费太多的时间。因为Vue 3不再支持IE 11&#xff0c;所以Element Plu…...

基于vue框架的的地铁站智慧管理系统的设计n09jb(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,上班打卡,下班打卡,人员管理,交接班,视频巡检,车辆巡检,车辆管理 开题报告内容 基于Vue框架的地铁站智慧管理系统的设计开题报告 一、研究背景与意义 随着城市化进程的加速&#xff0c;地铁站作为城市交通系统的重要组成部分&am…...