logback详细配置——基于时间文件大小分割限制日志大小

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZYC88888/article/details/85060315

正确配置

这里我使用的是springboot所以的 application.properties 文件增加

 logging.config=classpath:logback-spring.xml    // 指定日志配置文件

根目录增加 logback-spring.xml 配置文件

image.png

logback-spring.xml 配置文件
注:<rollingPolicy> 标签 的 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy是重点
日志输出的文件名:${LOG_FILE}-%d{yyyy-MM-dd}.%i.log   (%d 和 %i 必须存在)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <include resource="com/zyc/datamonitor/logback/monitor.xml" optional="true"/>

    <property name="FILE_PATH_ERROR" value="${CY_LOG_HOME}/ops-error.log"/>
    <property name="FILE_PATH_WARN" value="${CY_LOG_HOME}/ops-warn.log"/>
    <property name="FILE_PATH_INFO" value="${CY_LOG_HOME}/ops.log"/>
    <property name="FILE_PATH_DEBUG" value="${CY_LOG_HOME}/ops-debug.log"/>
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名 -->
        <File>${FILE_PATH_ERROR}</File>
        <!--滚动日志 基于时间和文件大小-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动日志文件保存格式 -->
            <FileNamePattern>${FILE_PATH_ERROR}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxFileSize>60MB</MaxFileSize>
            <totalSizeCap>5GB</totalSizeCap>
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
        <!-- 按临界值过滤日志:低于ERROR以下级别被抛弃 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名 -->
        <File>${FILE_PATH_INFO}</File>
        <!--滚动日志 基于时间和文件大小-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动日志文件保存格式 -->
            <FileNamePattern>${FILE_PATH_INFO}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxFileSize>60MB</MaxFileSize>
            <totalSizeCap>5GB</totalSizeCap>
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>

        <!-- 按临界值过滤日志:低于INFO以下级别被抛弃 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="FILE-WARN"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名 -->
        <File>${FILE_PATH_WARN}</File>
        <!--滚动日志 基于时间和文件大小-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动日志文件保存格式 -->
            <FileNamePattern>${FILE_PATH_WARN}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxFileSize>60MB</MaxFileSize>
            <totalSizeCap>5GB</totalSizeCap>
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
        <!-- 按临界值过滤日志:低于WARN以下级别被抛弃 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <!-- 按指定规则过滤日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch><!-- ERROR级别被抛弃 -->
            <onMismatch>NEUTRAL</onMismatch><!-- 其它级别继续处理 -->
        </filter>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="FILE-DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件输出的文件名 -->
        <File>${FILE_PATH_DEBUG}</File>
        <!--滚动日志 基于时间和文件大小-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 滚动日志文件保存格式 -->
            <FileNamePattern>${FILE_PATH_DEBUG}.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <MaxFileSize>60MB</MaxFileSize>
            <totalSizeCap>5GB</totalSizeCap>
            <MaxHistory>10</MaxHistory>
        </rollingPolicy>
        <!-- 按临界值过滤日志:低于INFO以下级别被抛弃 -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <!-- 不过滤日志 -->
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] %logger{50} - %msg%n
            </pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <springProfile name="test,dev">
        <logger name="org.springframework" level="INFO" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </logger>
        <logger name="o.springframework" level="INFO" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </logger>
        <logger name="com.netflix" level="INFO" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </logger>
        <logger name="com.zyc.test" level="DEBUG" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </logger>
        <logger name="java.sql" level="DEBUG" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </logger>

        <!-- 日志输出级别 -->
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-DEBUG"/>
        </root>
    </springProfile>

    <springProfile name="prod,default">
        <logger name="org.springframework" level="WARN" additivity="false">
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
        </logger>
        <logger name="com.netflix" level="WARN" additivity="false">
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
        </logger>
        <logger name="com.zyc.test" level="INFO" additivity="false">
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
        </logger>
        <logger name="java.sql" level="INFO" additivity="false">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
        </logger>

        <!-- 日志输出级别 -->
        <root level="WARN">
            <appender-ref ref="FILE-ERROR"/>
            <appender-ref ref="FILE-WARN"/>
            <appender-ref ref="FILE-INFO"/>
            <appender-ref ref="FILE-INFO"/>
        </root>
    </springProfile>
</configuration>

启动参数 

#!/bin/bash

export CY_LOG_HOME="/logs/ops"
export SPRING_CLOUD_CONFIG_URI=http://10.20.1.1:9482
export SPRING_CLOUD_CONFIG_PROFILE=test_V1.0
export SPRING_CLOUD_CONFIG_LABEL=default
export SPRING_CLOUD_CONFIG_NAME=test
JAVA_OPTS="-server -Xmx2g -Xms2g -Xmn1024m -Xss256k -XX:MetaspaceSize=96m"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC"
JAVA_OPTS="$JAVA_OPTS -XX:CMSMaxAbortablePrecleanTime=5000"
JAVA_OPTS="$JAVA_OPTS -XX:+CMSClassUnloadingEnabled "
JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled"
JAVA_OPTS="$JAVA_OPTS -XX:+UseFastAccessorMethods"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_OPTS="$JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent"
JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=80"
JAVA_OPTS="$JAVA_OPTS -XX:SurvivorRatio=10"
JAVA_OPTS="$JAVA_OPTS -XX:MaxDirectMemorySize=1g"
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CY_LOG_HOME/java.hprof"
JAVA_OPTS="$JAVA_OPTS -Xloggc:$CY_LOG_HOME/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPTS="$JAVA_OPTS -Dlog_path=$CY_LOG_HOME"
java $JAVA_OPTS -Dspring.profiles.active=default -jar /server/test/lib/test.jar

猜你喜欢

转载自blog.csdn.net/ZYC88888/article/details/85060315
今日推荐