版权声明:本文为博主原创文章,未经博主允许不得转载。 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