<?xml version="1.0" encoding="UTF-8"?>
|
<!--scan为true(默认每一分钟扫描一下配置文件,如果发生更改就重新加载配置文件)
|
scanPeriod设置扫描配置文件的时间间隔(如果没有指定单位默认为毫秒)
|
debug 如果设置为true,在控制台中打印logback内部运行日志(内部状态信息,如果配置文件有错误
|
也会输出),由于logback已经很稳定了,我们一般设置为false,以免干扰我们查看有用的日志信息 -->
|
<configuration scan="true" scanPeriod="60 seconds" debug="true">
|
<contextName>BuWan</contextName>
|
<!--定义参数常量(全局变量)-->
|
<!--设置Logger的等级 (TRACE<DEBUG<INFO<WARN<ERROR),假设配置为INFO,那么debug将不会被
|
输出,我们一般会把debug,info,error的信息分别输出到文件中-->
|
<property name="log.level" value="debug"/>
|
<!--归档日志文件保存的最大时间(单位跟按什么轮转有关,比如按天轮转那么单位就为天) -->
|
<property name="log.maxHistory" value="30"/>
|
<!--日志存储的根路径 ${catalina.base}指向每个Tomcat目录私有信息的位置,
|
就是conf、logs、temp、webapps和work的父目录-->
|
<property name="log.filePath" value="E:/logback"/>
|
<!--日志展示的格式-->
|
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
|
|
<property resource="kafka_log.properties"></property>
|
|
<property name="tencent.log.accesskey" value="AKIDTlpgJhLjOozvd6QI2XnpfGbgV4NQJk25"/>
|
|
<property name="tencent.log.accessKeySecret" value="xhCSUHo55oHUQ6XicFcmfIgspX0EEzWo"/>
|
|
<!--appender是为了配置日志信息输出到哪个地方-->
|
<!--控制台设置,输出到控制台中-->
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<!--encoder作用是既把日志信息转换为字符串,也输出到指定的位置 -->
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<!--pattern为配置输出的格式-->
|
<pattern>${log.pattern}</pattern>
|
</encoder>
|
</appender>
|
|
<!-- ERROR -->
|
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/error/error.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
|
<maxHistory>${log.maxHistory}</maxHistory>
|
</rollingPolicy>
|
|
<layout class="ch.qos.logback.classic.PatternLayout">
|
<pattern>
|
${log.pattern}
|
</pattern>
|
</layout>
|
</appender>
|
|
|
<appender name="ALIPAY_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/alipay/alipay.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/alipay/alipay.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
|
<maxHistory>${log.maxHistory}</maxHistory>
|
</rollingPolicy>
|
|
<layout class="ch.qos.logback.classic.PatternLayout">
|
<pattern>
|
${log.pattern}
|
</pattern>
|
</layout>
|
</appender>
|
|
|
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/debug/debug.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
|
<maxHistory>${log.maxHistory}</maxHistory>
|
</rollingPolicy>
|
|
<layout class="ch.qos.logback.classic.PatternLayout">
|
<pattern>
|
${log.pattern}
|
</pattern>
|
</layout>
|
|
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
<level>DEBUG</level>
|
<onMatch>ACCEPT</onMatch>
|
<onMismatch>DENY</onMismatch>
|
</filter>
|
</appender>
|
|
|
<!-- DEBUG -->
|
<!-- 客户端接口出错 -->
|
<appender name="apiErrorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/client-api-error.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/error/client-api-error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
|
<maxHistory>${log.maxHistory}</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="searchAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/search.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/info/search.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
|
<maxHistory>${log.maxHistory}</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="videoSearchAppender" class="com.tencentcloudapi.cls.LoghubAppender">
|
<!--必选项-->
|
<endpoint>ap-guangzhou.cls.tencentcs.com</endpoint>
|
<accessKeyId>${tencent.log.accesskey}</accessKeyId>
|
<accessKeySecret>${tencent.log.accessKeySecret}</accessKeySecret>
|
<topicId>b92e919d-c3f4-435e-9b9f-8a66d5c3989a</topicId>
|
|
<!-- 可选项 详见 '参数说明'-->
|
<!-- #单个 producer 实例能缓存的日志大小上限,默认为 100MB。 -->
|
<totalSizeInBytes>104857600</totalSizeInBytes>
|
<!--如果 producer 可用空间不足,调用者在 send 方法上的最大阻塞时间,默认为 60 秒。为了不阻塞打印日志的线程,强烈建议将该值设置成 0。 -->
|
<maxBlockMs>0</maxBlockMs>
|
<!--执行日志发送任务的线程池大小,默认为可用处理器个数。 -->
|
<sendThreadCount>8</sendThreadCount>
|
<!-- 当一个 ProducerBatch 中缓存的日志大小大于等于 batchSizeThresholdInBytes 时,该 batch 将被发送,默认为 512 KB,最大可设置成 5MB。-->
|
<batchSizeThresholdInBytes>10</batchSizeThresholdInBytes>
|
<!--当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送,默认为 4096,最大可设置成 40960 -->
|
<batchCountThreshold>1</batchCountThreshold>
|
<!-- 一个 ProducerBatch 从创建到可发送的逗留时间,默认为 2 秒,最小可设置成 100 毫秒-->
|
<lingerMs>2000</lingerMs>
|
<!-- 如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列 -->
|
<retries>10</retries>
|
<!--首次重试的退避时间,默认为 100 毫秒 -->
|
<baseRetryBackoffMs>100</baseRetryBackoffMs>
|
<!-- 重试的最大退避时间,默认为 50 秒。 -->
|
<maxRetryBackoffMs>50000</maxRetryBackoffMs>
|
|
<!-- 可选项 设置时间格式 -->
|
<timeFormat>yyyy-MM-dd'T'HH:mm:ssZ</timeFormat>
|
<timeZone>Asia/Shanghai</timeZone>
|
<encoder>
|
<pattern>${log.pattern}</pattern>
|
</encoder>
|
<mdcFields>THREAD_ID,MDC_KEY</mdcFields>
|
</appender>
|
|
|
<appender name="videoPlayAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/video/video_play.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/video/video_play.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
|
<maxHistory>${log.maxHistory}</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>
|
|
|
|
|
|
|
|
<!--name表示为哪一个logger指定层级和输出的方式
|
additivity表示叠加祖先的输出方式(默认为true,会叠加),所以com.lxc.o2o以及其子类都会输出在控制台中,因为这个logger继承了root中的appender
|
level表示级别大于等于${log.level}的信息才会输出,输出方式为配置的appender,
|
由于这里level为debug(重写了,就不会继承root的level了),
|
所以控制台中会输出大于等于debug等级的日志(包括持久层执行的mysql)
|
并且
|
debug日志会输出到debugAppender指定的文件中
|
info日志会输出到infoAppender指定的文件中
|
error日志会输出到errorAppender指定的文件中-->
|
|
|
<logger name="com.hxh.spring" level="INFO">
|
<appender-ref ref="STDOUT"></appender-ref>
|
</logger>
|
|
<!--additivity 是否向上传递 -->
|
<logger name="com.yeshi.buwan.aspect" level="ERROR" additivity="true">
|
<appender-ref ref="apiErrorAppender"></appender-ref>
|
</logger>
|
|
<!--视频搜索关键词 -->
|
<logger name="com.yeshi.buwan.service.manager.search.SolrAlbumVideoDataManager" level="INFO" additivity="true">
|
<appender-ref ref="videoSearchAppender"></appender-ref>
|
</logger>
|
|
|
<logger name="videoPlay" level="INFO" additivity="true">
|
<appender-ref ref="videoPlayAppender"></appender-ref>
|
</logger>
|
|
|
<logger name="com.yeshi.buwan" level="DEBUG" additivity="true">
|
<appender-ref ref="ERROR_FILE"></appender-ref>
|
<appender-ref ref="DEBUG_FILE"></appender-ref>
|
</logger>
|
|
|
<logger name="com.yeshi.buwan.controller.AlipayController" level="INFO" additivity="false">
|
<appender-ref ref="ALIPAY_FILE"></appender-ref>
|
</logger>
|
|
<appender name="vipAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<file>${log.filePath}/vip/vip.log</file>
|
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<fileNamePattern>${log.filePath}/vip/vip.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
|
<maxHistory>${log.maxHistory}</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>
|
|
<logger name="vip" level="INFO" additivity="true">
|
<appender-ref ref="vipAppender"></appender-ref>
|
</logger>
|
|
|
<!-- 关键词搜索 -->
|
<logger name="searchKey" level="INFO" additivity="false">
|
<!--<appender-ref ref="KAFKA_SEARCH_KEY"></appender-ref>-->
|
</logger>
|
|
|
<logger name="org.hibernate.type" level="ALL" />
|
<logger name="org.hibernate" level="DEBUG" />
|
<logger name="org.springframework.transaction" level="INFO" />
|
<logger name="org.springframework.data.solr" level="DEBUG" />
|
|
<logger name="io.seata" level="DEBUG"></logger>
|
|
|
<!-- 一切logger都会继承自root,root默认的层级level为debug -->
|
<root>
|
<level value="DEBUG"/>
|
<!--在控制台中输出所在层级对应level(以及大于level)的日志信息,因为这里并没有设置LevelFilter-->
|
<appender-ref ref="STDOUT"></appender-ref>
|
|
<appender-ref ref="DEBUG_FILE"></appender-ref>
|
</root>
|
</configuration>
|