日志分割问题

SpringBoot版本使用2.3

maven打包

build部分代码如下

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.test.Application</mainClass>
                        </manifest>
                    </archive>
                    <excludes>
                        <exclude>*.properties</exclude>
                        <exclude>*.sh</exclude>
                        <exclude>*.bat</exclude>
                        <exclude>*.xml</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/${project.artifactId}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>deploy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.build.directory}/${project.build.finalName}.${project.packaging}"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}/config/" file = "${project.build.directory}/classes/application-dev.properties"></copy>
                                <move file="${project.build.directory}/${project.build.finalName}/config/application-dev.properties" tofile="${project.build.directory}/${project.build.finalName}/config/application.properties"/>
                                <copy todir = "${project.build.directory}/${project.build.finalName}/config/" file = "${project.build.directory}/classes/seata.conf"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}/config/" file = "${project.build.directory}/classes/logback-spring.xml"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.basedir}/src/bin/start.sh"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.basedir}/src/bin/stop.sh"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.basedir}/src/bin/deploy.sh"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.basedir}/src/bin/Dockerfile"></copy>
                                <copy todir = "${project.build.directory}/${project.build.finalName}" file = "${project.basedir}/src/bin/run.bat"></copy>
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

application.properties配置

部分关键配置如下:

logging.config=config/logback.xml
logging.level.root=ERROR
logging.level.com.test=INFO
logging.file.max-history=7
logging.file.max-size=100MB

编译后目录结构

├ config
│ ├ application.properties
│ ├ logback.xml
│ ├ seata.conf
├ lib
│ ├ accessors-smart-1.2.jar
│ ├ android-json-0.0.20131108.vaadin1.jar
│ ├ …
├ demo.jar
├ deploy.sh
├ Dockerfile
├ run.bat
├ start.sh
├ stop.sh

logback.xml配置

这使用的是自定义配置,主要修改这个文件即可,如果在logback中需要使用application.properties中配置信息,使用springProperty配置即可,source对应的就是application.properties中的配置项,xml中使用${LOG_SIZE}即可。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>

    <property name="LOG_HOME" value="logs"/>
    <property name="APP_NAME" value="demo"/>
    <springProperty scope="context" name="LOG_SIZE" source="logging.file.max-size"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg [%thread]\(%c:%L\)%n</pattern>
        </encoder>
    </appender>

    <appender name="FILELOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${APP_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
            <maxFileSize>${LOG_SIZE}</maxFileSize>
            <maxHistory>5</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg [%thread]\(%c:%L\)%n</pattern>
        </encoder>
    </appender>

    <appender name="ERRORLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${APP_NAME}-err.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern
            >${LOG_HOME}/${APP_NAME}-err.log.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
            <maxFileSize>${LOG_SIZE}</maxFileSize>
            <maxHistory>5</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %msg [%thread]\(%c:%L\)%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="ERROR">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILELOG"/>
        <appender-ref ref="ERRORLOG"/>
    </root>

    <logger name="com.test" level="INFO"/>

</configuration>

deploy.sh

#!/bin/sh

app_name=demo
docker stop $app_name
docker rm -f $app_name
docker rmi $app_name:latest
docker build -t $app_name:latest .
docker run -d --network=host --name $app_name \
-v /data/app/$app_name/logs:/opt/app/logs \
-v /data/app/$app_name/config:/opt/app/config \
$app_name:latest

Dockerfile

FROM adoptopenjdk/openjdk8:aarch64-ubuntu-jre8u352-b05-ea-nightly
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir -p /opt/app/logs
RUN mkdir -p /opt/app/config
RUN mkdir -p /opt/app/lib
WORKDIR /opt/app

ADD lib/ /opt/app/lib
COPY demo.jar /opt/app/demo.jar

CMD java -Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/app/logs/demo.hprof -jar /opt/app/demo.jar --spring.config.location=/opt/app/config/  > /opt/app/logs/demo.log 2>&1

#CMD while true; do sleep 1; done

EXPOSE 8080

start.sh

#!/bin/sh

SH_DIR=$(cd `dirname $0`;pwd)
java_home=env|grep "JAVA_HOME";
latestjar=`ls $SH_DIR -lt | grep '.jar'| awk '{print $9}' | sed -n '1p'`
echo 'Start:'$latestjar
process_exists=`ps -ef|grep $latestjar|grep -v grep|awk '{print $2}'`
if [ -n "${process_exists}" ];then
    kill -9 ${process_exists}
fi
if [ ! -n "$java_home" ]; then
    cd $SH_DIR/
    nohup java -Xms100m -Xmx2g -jar $SH_DIR/$latestjar --spring.config.location=$SH_DIR/config/ > /dev/null 2>&1 &
    echo "Application is started";
    cd -;
    exit;
else
    java -version;
    if [ $? -eq 0 ]; then
        cd $SH_DIR/
        nohup java -Xms100m -Xmx2g -jar $SH_DIR/$latestjar --spring.config.location=$SH_DIR/config/ > /dev/null 2>&1 &
    else
        echo "This system has no jdk";
        cd -;
        exit;
    fi
fi

stop.sh

#!/bin/sh
SH_DIR=$(cd `dirname $0`;pwd)
java_home=env|grep "JAVA_HOME";
latestjar=`ls $SH_DIR -lt | grep '.jar'| awk '{print $9}' | sed -n '1p'`
echo 'Stop:'$latestjar
process_exists=`ps -ef|grep $latestjar|grep -v grep|awk '{print $2}'`
if [ -n "${process_exists}" ];then
    kill -9 ${process_exists}
fi
echo "Application stop sucess"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angushine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值