<?xml version="1.0" encoding="UTF-8"?>
<!--鏃ュ織绾у埆浠ュ強浼樺厛绾ф帓搴�: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Configuration status="WARN" monitorInterval="60">
<!-- 鑷畾涔変竴浜涘彉閲� -->
    <Properties>
        <!-- 鍙橀噺瀹氫箟 -->
        <Property name="log_base_dir">logs/shared_rest_web</Property>
        <Property name="log_debug_dir">${log_base_dir}/debug</Property>
        <Property name="log_info_dir">${log_base_dir}/info</Property>
        <Property name="log_error_dir">${log_base_dir}/error</Property>
        <Property name="log_sql_dir">${log_base_dir}/sqllog</Property>
        <Property name="log_pattern">%d{yyyy-MM-dd HH:mm:ss.SSS}  [%highlight{%-8level}{ERROR=Red, WARN=Yellow, INFO=Green, DEBUG=White}]  [%t-%T]-%style{[%c{1.}.%M:%L]}{Blue} : %msg%xEx%n</Property>
        <!-- 鍗曚釜鏃ュ織鏂囦欢鏈€澶уぇ灏忥紝鍗曚綅鍙互鏄疜B, MB or GB -->
        <Property name="max_single_file_size">5MB</Property>
    </Properties>

    <!-- 浣跨敤Appenders鍏冪礌鍙互灏嗘棩蹇椾簨浠舵暟鎹啓鍒板悇绉嶇洰鏍囦綅缃紙鐩墠鍙互涓烘帶鍒跺彴銆佹枃浠躲€佸绉嶆暟鎹簱API銆佽繙绋嬪鎺ュ瓧鏈嶅姟鍣ㄣ€丄pache Flume銆�
    JMS銆佽繙绋婾NIX Syslog daemon锛夛紝鍏跺唴鐨勬瘡涓狝ppender閮藉繀椤昏鏈変竴涓猲ame灞炴€т綔涓哄敮涓€鏍囪瘑锛岃鏍囪瘑鐨勫€煎湪Logger涓€氳繃AppenderRef鏉ュ紩
    鐢紝浠庤€屽皢璇ppender閰嶇疆鍒拌Logger涓� -->
    <Appenders>

        <!-- Console Appender甯哥敤浜庡皢鏃ュ織杈撳嚭鍒癝ystem.out锛屼竴鑸敤鍦ㄥ紑鍙戠幆澧� -->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 鍙帴鍙楃▼搴忎腑DEBUG绾у埆鐨勬棩蹇楄繘琛屽鐞�-->
            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝Appender灏嗘牸寮忓寲LogEvent鐨勮矗浠诲鎵樼粰Layout -->
            <PatternLayout pattern="${log_pattern}"/>
        </Console>

        <RollingFile name="ErrorLogRollingFile" fileName="${log_error_dir}/error.log"
                     filePattern="${log_error_dir}/$${date:yyyy_MM_dd}/error_%d{yyyy_MM_dd}_%i.log.gz">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${log_pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_error_dir}" maxDepth="2">
                    <IfFileName glob="*/error_*.log.gz">
                        <IfAny>
                            <!--                            <IfAccumulatedFileSize exceeds="3GB"/>-->
                            <!--                            <IfAccumulatedFileCount exceeds="3000"/>-->
                            <IfLastModified age="3D"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <RollingFile name="InfoLogRollingFile" fileName="${log_info_dir}/info.log"
                     filePattern="${log_info_dir}/$${date:yyyy_MM_dd}/info_%d{yyyy_MM_dd_HH}_%i.log">
<!--            <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="DENY"/>-->
            <LevelRangeFilter  minLevel="WARN" maxLevel="INFO" onMatch="ACCEPT" onMismatch="DENY"  />
            <PatternLayout pattern="${log_pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_info_dir}" maxDepth="2">
                    <IfFileName glob="*/info_*.log">
                        <IfAny>
                            <!--                            <IfAccumulatedFileSize exceeds="8MB"/>-->
                            <IfAccumulatedFileCount exceeds="5"/>
                            <IfLastModified age="PT1H"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- 杩欎釜RollingFile Appender浼氭墦鍗板嚭鎵€鏈夌殑DEBUG鍙婁互涓嬬骇鍒紙DEBUG銆両NFO銆丒RROR銆丗ATAL銆丱FF锛夌殑淇℃伅 -->
        <RollingFile name="DebugLogRollingFile" fileName="${log_debug_dir}/debug.log"
                     filePattern="${log_debug_dir}/$${date:yyyy_MM_dd}/debug_%d{yyyy_MM_dd_HH}_%i.log">
            <!-- <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>-->
            <LevelRangeFilter  minLevel="DEBUG" maxLevel="DEBUG" onMatch="ACCEPT" onMismatch="DENY"  />
            <PatternLayout pattern="${log_pattern}" charset="UTF-8"/>
            <!-- Policies琛ㄧず涓€涓狢ompositeTriggeringPolicy锛屽彲浠ョ粍鍚堝涓猅riggeringPolicy锛屽彧瑕佸唴閮ㄧ殑浠绘剰涓€涓猅riggeringPolicy
            婊¤冻瑙﹀彂鏉′欢锛岄兘浼氭粴鍔ㄦ棩蹇� -->
            <Policies>
                <TimeBasedTriggeringPolicy />
                <!-- SizeBasedTriggeringPolicy鐢ㄤ簬鎸夋枃浠跺ぇ灏忔粴鍔ㄦ棩蹇椼€傛瘡褰撴棩蹇楁枃浠惰秴杩噑ize鎸囧畾鐨勫ぇ灏忥紙涓€鑸笉瓒呰繃鍑犲崄MB锛屽惁鍒欎娇鐢ㄨ蒋
                浠舵墦寮€瀵煎嚭鐨勬棩蹇楁椂寰堜笉鏂逛究锛夛紝鍒欒繖size澶у皬鐨勬棩蹇椾細鑷姩瀛樺叆鎸塮ilePattern灞炴€ф寚瀹氬缓绔嬬殑鏂囦欢澶逛笅闈㈠苟杩涜鍘嬬缉瀛樻。 -->
                <SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
            </Policies>
            <!--<DefaultRolloverStrategy max="100" min="1" fileIndex = "nomax"/>-->
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_debug_dir}" maxDepth="2">
                    <IfFileName glob="*/debug_*.log">
                        <IfLastModified age="PT1M">
                            <!-- 杩欓噷鐨処fAny鍐呭祵浜嗕袱涓狿athCondition锛岃〃绀烘弧瓒充换鎰忎竴涓潯浠跺嵆鍙� ,涓嶆槸蹇呴』锛屽彲鐩存帴鏍规嵁鏃堕棿鍒犻櫎-->
                            <IfAny>
                                <!-- IfAccumulatedFileSize鍙€氳繃exceeds灞炴€у€兼寚瀹氫竴涓枃浠舵€诲ぇ灏忎笂闄愬€笺€傚鏋滄枃浠舵暟瓒呰繃浜嗚涓婇檺鍊�
                                鍒欏垹闄ゆ枃浠� -->
                                <IfAccumulatedFileSize exceeds="5MB"/>
                                <!-- IfAccumulatedFileCount鍙€氳繃exceeds灞炴€у€兼寚瀹氫竴涓枃浠舵€绘暟涓婇檺鍊笺€傚鏋滄枃浠舵暟瓒呰繃浜嗚涓婇檺鍊�
                                鍒欏垹闄ゆ枃浠� -->
                                <IfAccumulatedFileCount exceeds="5"/>
                            </IfAny>
                        </IfLastModified>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>



<!--        <RollingFile name="WarnLogRollingFile" fileName="${log_base_dir}/my_app_warn.log"-->
<!--                     filePattern="${log_base_dir}/$${date:yyyy_MM_dd}/my_app_warn_%d{yyyy_MM_dd_HH}_%i.log.gz">-->
<!--            <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!--            <PatternLayout pattern="${log_pattern}"/>-->
<!--            <Policies>-->
<!--                <TimeBasedTriggeringPolicy/>-->
<!--                <SizeBasedTriggeringPolicy size="${max_single_file_size}"/>-->
<!--            </Policies>-->
<!--            <DefaultRolloverStrategy fileIndex="nomax">-->
<!--                <Delete basePath="${log_base_dir}" maxDepth="2">-->
<!--                    <IfFileName glob="*/my_app_warn_*.log.gz">-->
<!--                        <IfAny>-->
<!--                            <IfAccumulatedFileSize exceeds="3GB"/>-->
<!--                            <IfAccumulatedFileCount exceeds="3000"/>-->
<!--                            <IfLastModified age="30d"/>-->
<!--                        </IfAny>-->
<!--                    </IfFileName>-->
<!--                </Delete>-->
<!--            </DefaultRolloverStrategy>-->
<!--        </RollingFile>-->



        <!-- 璁板綍druid鐨凷QL璇彞 -->
        <RollingFile name="DruidSqlRollingFile" fileName="${log_sql_dir}/druid.log"
                     filePattern="${log_sql_dir}/$${date:yyyy_MM_dd}/druid_%d{yyyy_MM_dd}_%i.log">
            <PatternLayout pattern="${log_pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${max_single_file_size}"/>
            </Policies>
            <DefaultRolloverStrategy fileIndex="nomax">
                <Delete basePath="${log_base_dir}" maxDepth="2" testMode="true">
                    <IfFileName glob="*/druid_*.log">
                        <IfAny>
<!--                            <IfAccumulatedFileSize exceeds="3GB"/>-->
<!--                            <IfAccumulatedFileCount exceeds="3000"/>-->
                            <IfLastModified age="PT6H"/>
                        </IfAny>
                    </IfFileName>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <!--瀹氫箟logger锛屽彧鏈夊畾涔変簡logger骞跺紩鍏ョ殑appender锛宎ppender鎵嶄細鐢熸晥-->
    <Loggers>
        <!-- 褰揕ogger鍦ㄩ厤缃枃浠朵腑澹版槑鏃讹紝灏卞垱寤轰簡涓€涓狶oggerConfig瀵硅薄锛屼袱鑰呬竴涓€瀵瑰簲锛孡oggerConfig鍖呭惈涓€浜汧ilter銆佽繖浜�
        Filters鐢ㄤ簬杩囨护浼犻€掔粰浠绘剰Appender鐨凩ogEvent锛屽畠杩樺寘鍚竴浜汚ppender鐨勫紩鐢ㄣ€侺ogger鏈韩鎵ц鏃犳寚鍚戠殑鍔ㄤ綔锛屽畠浠呭惈鏈変竴
        涓笌LoggerConfig鍏宠仈鐨勫悕绉帮紙閫氳繃name灞炴€ф寚瀹氾級锛宺oot Logger鍏锋湁鍥哄畾鐨勯粯璁ゅ悕绉帮紝鍏朵粬Logger闇€瑕佹寚瀹氬悇鑷殑name灞炴€�
        鍊笺€侺oggerConfig浼氳鍒嗛厤涓€涓棩蹇楃骇鍒紝閫氳繃level灞炴€ф潵鎸囧畾銆傚唴寤虹殑鏃ュ織绾у埆鎸変紭鍏堢骇浠庨珮鍒板簳鎺掑簭鏈夛細OFF > FATAL >
        ERROR > WARN > INFO > DEBUG > TRACE > ALL锛孡og4j 2 涔熸敮鎸佽嚜瀹氫箟鐨勬棩蹇楃骇鍒€�
        -->
        <Root level="DEBUG">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="ErrorLogRollingFile" />
            <AppenderRef ref="InfoLogRollingFile"/>
            <AppenderRef ref="DebugLogRollingFile"/>
<!--            <AppenderRef ref="WarnLogRollingFile"/>-->
        </Root>

        <!--璁板綍druid-sql鐨勮褰�-->
        <Logger name="org.hibernate.SQL" level="debug" additivity="false">
            <appender-ref ref="DruidSqlRollingFile"/>
        </Logger>

        <!--杩囨护鎺塻pring鍜宮ybatis鐨勪竴浜涙棤鐢ㄧ殑DEBUG淇℃伅-->
        <Logger name="org.springframework" level="INFO"/>
        <Logger name="org.mybatis" level="INFO"/>

        <!--log4j2 鑷甫杩囨护鏃ュ織-->
        <Logger name="org.apache.catalina.startup.DigesterFactory" level="error"/>
        <Logger name="org.apache.catalina.util.LifecycleBase" level="error"/>
        <Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/>
        <Logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
        <Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/>
        <Logger name="org.crsh.plugin" level="warn"/>
        <Logger name="org.crsh.ssh" level="warn"/>
        <Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error"/>
        <Logger name="org.hibernate.validator.internal.util.Version" level="warn"/>
        <Logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
        <Logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
        <Logger name="org.thymeleaf" level="warn"/>
    </Loggers>
</Configuration>

<!--<?xml version="1.0" encoding="UTF-8"?>-->
<!--<Configuration name="log4j2" status=""  xmlns="http://logging.apache.org/log4j/2.0/config" >-->

<!--    <Properties>-->
<!--        <Property name="home">./logs</Property>-->
<!--        <Property name="pattern">%d{yyyy-MM-dd HH:mm:ss.SSS}-%-2level-[%thread]</Property>-->
<!--    </Properties>-->
<!--</Configuration>-->