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的配置-->
<!--<!–符合过滤条件–>-->
<!--<onMatch>ACCEPT</onMatch>-->
<!--<!–<!–不符合过滤条件–>–>-->
<!--<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>