springboot集成logback日志

yml配置

jar包同级目录下新建config文件夹 将yml文件拷贝到config文件夹中

日志配置:指定环境启动
    logging:
        config: C:\Users\ttg\Desktop\log-service\config\logback-${spring.profiles.active}.xml
        path: C:\Users\ttg\Desktop
        root: info
        com.ttg: info

logback文件配置

将logback配置文件拷贝到config文件夹中

<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <!--加载默认配置文件-->
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <!--通过springProperty标签获取yml配置内容-->
        <springProperty scope="context" name="LOG_LEVEL" source="log.level"/>
        <springProperty scope="context" name="APP_ID" source="spring.application.name"/>
        <property name="LOG_PATH" value="log.path"/>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <!--应用default.xml中的变量-->
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!--文件格式内容为:日期 时间 文件 行 输出内容-->
                <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
                <!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>


    <appender name="FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--配置过滤条件-->
            <level>DEBUG</level><!-- 过滤掉 TRACE 和 DEBUG 级别的日志-->
            <!--如果配置以下两个属性,则只会打印出过滤级别的日志,且优先级大于logger、root的配置-->
            <!--&lt;!&ndash;符合过滤条件&ndash;&gt;-->
            <!--<onMatch>ACCEPT</onMatch>-->
            <!--&lt;!&ndash;&lt;!&ndash;不符合过滤条件&ndash;&gt;&ndash;&gt;-->
            <!--<onMismatch>DENY</onMismatch>-->
        </filter>
        <file>${LOG_PATH}/${APP_ID}/access.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APP_ID}/%d{yyyy-MM-dd}/access.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <!--日志文件保留天数-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <appender name="FILE_LOG_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>${LOG_PATH}/${APP_ID}/access_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APP_ID}/%d{yyyy-MM-dd}/access_error.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <appender name="ASYNC_LOG" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <appender-ref ref="FILE_LOG"/>
    </appender>

    <appender name="ASYNC_LOG_ERROR" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
        <queueSize>512</queueSize>
        <appender-ref ref="FILE_LOG_ERROR"/>
    </appender>

    <!--控制台输出-->
    <root level="INFO">
        <!--ref="STDOUT" 引用了appender配置,控制台打印输出-->
        <!--<appender-ref ref="STDOUT" />-->
        <appender-ref ref="ASYNC_LOG" />
        <appender-ref ref="ASYNC_LOG_ERROR" />
    </root>
    <!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
    <logger name="org.springframework" level="WARN"/>
    <!--logger优先级最高,如果logger配置了级别,将会优先使用logger,然后使用root,然后使用具体的引用配置-->
    <!--例如:com.ttg包下的日志,将会打印出info-->
    <!-- additivity为是否追加到root中 如果为true 默认为true 且root中配置同样的appender,则日志信息将会打印两次-->
    <logger name="com.ttg" level="INFO"  additivity="true">
        <!--引用appender 日志生成管理策略-->
        <appender-ref ref="ASYNC_LOG" />
        <appender-ref ref="ASYNC_LOG_ERROR" />
    </logger>
</configuration>

配置说明

	<!-- 日志日常打印文件 -->
    <file>logs/mylog.log</file>
    <!-- 配置日志所生成的目录以及生成文件名的规则 在logs/mylog-2017-06-31.0.log.zip -->        
    <!--按照每天
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logs/mylog-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
        <!-- 如果按天来回滚,则最大保存时间为365天,365天之前的都将被清理掉 -->
        <maxHistory>365</maxHistory>
        <!-- 日志总保存量为10GB -->
        <totalSizeCap>10GB</totalSizeCap>
        <!--配置文件切割压缩大小,当文件大于128MB的时候会被压缩成压缩成zip,zip文件夹是上面定义文件件-->
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!--文件达到 最大128MB时会被压缩和切割 -->
            <maxFileSize>128 MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    
    <!--配置 直接压缩前一天生成的日志文件 保存日期为10天-->
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/${APP_ID}/%d{yyyy-MM-dd}/access_error.log.%d{yyyy-MM-dd}.zip</fileNamePattern>
        <maxHistory>10</maxHistory>
    </rollingPolicy>

启动命令 指定环境启动

java -jar log-service-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

启动脚本

#!/usr/bin/env bash
##service name
APP_NAME=admin
SERVICE_NAME=$APP_NAME-service
SERVICE_DIR=/app/www/javaweb/appJFT/services/pay-center/$SERVICE_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
LOG_DIR=/app/logs/appJFT/services/log
SERVICE_LOG=$SERVICE_NAME\.log
cd "$SERVICE_DIR" || exit -1
if [ -z "$SERVICEPIDFILE" ]; then
	SERVICEPIDFILE="$SERVICE_DIR/$PID"
else
    # ensure it exists, otw stop will fail
    mkdir -p "$( dirname "$SERVICEPIDFILE" ) "
fi
if [ ! -d "$_LOG_DIR" ];then
	mkdir -p "$LOG_DIR"
fi
_LOG_OUT="$LOG_DIR/$SERVICE_LOG"

case "$1" in
	start)
   		 echo  -n "Starting $SERVICE_NAME ... "
    		if [ -f "$SERVICEPIDFILE" ]; then
      		if kill -0 `cat "$SERVICEPIDFILE"` > /dev/null 2>&1; then
         		echo $SERVICE_NAME already running as process `cat "$SERVICEPIDFILE"`.
         		exit 0
      		fi
    		fi

		if [ ! -f "$JAR_NAME" ];then
echo $JAR_NAME is not exists !!!
                exit 1
else
		#nohup java -Xms256m -Xmx512 -jar $JAR_NAME > $LOG 2>&1 >/dev/null &
		nohup java -jar  $JAR_NAME > "$_LOG_OUT" 2>&1 < /dev/null &
		if [ $? -eq 0 ]
    then
      case "$OSTYPE" in
      *solaris*)
        /bin/echo "${!}\\c" > "$SERVICEPIDFILE"
        ;;
      *)
        /bin/echo -n $! > "$SERVICEPIDFILE"
        ;;
      esac
      if [ $? -eq 0 ];
      then
        sleep 1
        echo STARTED
echo "start $SERVICE_NAME success !!!"
      else
        echo FAILED TO WRITE PID
echo "start $SERVICE_NAME failed !!!"
        exit 1
      fi
    else
      echo SERVER DID NOT START
echo "start $SERVICE_NAME failed !!!"
      exit 1
    fi
fi
		;;
	stop)
    echo -n "Stopping $SERVICE_NAME ... "
    if [ ! -f "$SERVICEPIDFILE" ]
    then
      echo "no $SERVICE_NAME to stop (could not find file $SERVICEPIDFILE)"
    else
      kill $(cat "$SERVICEPIDFILE")
      rm "$SERVICEPIDFILE"
      echo STOPPED
    fi
    exit 0
    ;;

	restart)
		shift
		echo "stop $SERVICE_NAME ..."
		$0 stop
		sleep 3
		echo "start $SERVICE_NAME ..."
		$0 start
		if [ $? -eq 0 ];then
		echo "restart $SERVICE_NAME success !!!"
		else
		echo "restart $SERVICE_NAME FAIL !!!"
		exit 1
fi
exit 0
;;

	*)
		echo "Usage: $0 {start|stop|restart}" >&2

esac

问题处理

1.logback配置文件使用include包含注意点 包含文件必须用<included>标签作为顶级父标签
    <include sources=""/> 在classpath目录下
    <include file=""/> 指定任意目录
2.jar包压缩  配置文件处理
    说明:java目录下的xml文件进行压缩,排除resources目录下的配置文件,将这些文件拷贝到jar的同级目录config目录下
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.yml</exclude>
                <exclude>**/*.xml</exclude>
            </excludes>
        </resource>
    </resources>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值