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时,生成新的日志文件。窗口大小是1到3,当保存了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 文件,通常位于项目的 classpath 下的根目录或者 src/main/resources 目录下。 Logback 提供了丰富的配置选项,可以满足各种不同的日志需求。需要根据具体情况进行配置。 项目创建࿰…...

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

VSCode编译器改为中文
1. 通过快捷键设置中文 打开命令面板:按住键盘上的CtrlShiftP组合键,打开命令面板。 输入并设置语言:在命令面板中输入Configure Display Language。 点击Configure Display Language选项。 在弹出的语言选择列表中,选择zh-cn…...

前端开发设计模式——状态模式
目录 一、状态模式的定义和特点 二、状态模式的结构与原理 1.结构: 2.原理: 三、状态模式的实现方式 四、状态模式的使用场景 1.按钮的不同状态: 2.页面加载状态: 3.用户登录状态: 五、状态模式的优点 1.提…...
特种作业操作烟花爆竹试题分享
1.(单选题)职业卫生研究的是人类从事各种职业劳动过程中的( )。 A.健康问题 B.环境问题 C.卫生问题 答案:C 2.(单选题)安全生产事关人民群众的( )安全,事关改革发展和…...

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

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

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

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

生成文件夹 - python 实现
生成文件夹保存图片和文本等信息。 代码具体实现如下: #-*-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 提供的常用快捷键
😀前言 本篇博文是关于python的基础语言介绍及IDLE 提供的常用快捷键,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…...

【python】OpenCV—Sort the Point Set from Top Left to Bottom Right
文章目录 1、功能描述2、代码实现3、效果展示4、更多例子5、参考 1、功能描述 给出一张图片,里面含有各种图形,取各种图形的中心点,从左到右从上到下排序 例如 2、代码实现 import cv2 import numpy as npdef process_img(img):img_gray c…...
LeetCode 1493.删掉一个元素以后全为1的最长子数组
题目: 给你一个二进制数组 nums ,你需要从中删掉一个元素。 请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。 如果不存在这样的子数组,请返回 0 。 思路:不定长滑动窗口,将问题…...
php常用设计模式之工厂模式
引言 在日常开发中,我们一些业务场景需要用到发送短信通知。然而实际情况考虑到不同厂商之间的价格、实效性、可能会出现的情况等 我们的业务场景往往会接入多个短信厂商来保证我们业务的正常运行,而不同的短信厂商(如阿里云短信、腾讯云短信…...
通用软件版本标识
软件版本标识:了解不同的版本类型 在软件开发和发布过程中,版本号和标识扮演着重要的角色。它们不仅帮助开发者追踪软件的演变,还让用户了解软件的稳定性和功能。以下是一些常见的软件版本标识,以及它们的含义和用途。 Alpha&am…...
(计算机毕设)基于SpringBoot的就业平台开题报告
一、立题依据(国内外研究进展或选题背景、研究意义等) 国内外研究进展或选题背景 在全球化的大背景下,就业问题一直是各国政府和社会各界关注的焦点。随着互联网技术的普及和发展,网络招聘已成为求职者和企业招聘的主要渠道。据相关数据显示࿰…...

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 是专为边缘计算和嵌入式系统设计的高性能计算平台,它支持多种深度学习模型的部署和推理。对于神经网络加速的量化平台,Jetson 支持以下技术和工具: TensorRT:Ten…...

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

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...

Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...