【loackback根据端口输出不同的日志文件】

使用这种方式不好使,本人亲测

logback配置类

package com.innovation.ic.b1b.util;

import ch.qos.logback.core.Context;
import ch.qos.logback.core.spi.PropertyDefiner;
import ch.qos.logback.core.status.Status;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;

import java.util.Map;

/**
 * logback自定义属性,用于在日志文件名中显示端口
 */
@Component
public class LogbackConfigUtil implements PropertyDefiner {

    private static final String LOGBACK_PORT_PARAMETER = "--server.port";

    public static String logbackPort;

    /**
     * 返回端口
     * @return
     */
    @Override
    public String getPropertyValue() {
        if (null == logbackPort){
            Yaml yaml = new Yaml();
            Map<String, Object> serverMap = yaml.load(LogbackConfigUtil.class.getResourceAsStream("/" + "bootstrap.yml"));
            Map<String, Object> portMap = (Map<String, Object>) serverMap.get("server");
            Integer port = (Integer) portMap.get("port");
            return port.toString();
        }else {
            return logbackPort;
        }
    }

    @Override
    public void setContext(Context context) {

    }

    @Override
    public Context getContext() {
        return null;
    }

    @Override
    public void addStatus(Status status) {

    }

    @Override
    public void addInfo(String msg) {

    }

    @Override
    public void addInfo(String msg, Throwable ex) {

    }

    @Override
    public void addWarn(String msg) {

    }

    @Override
    public void addWarn(String msg, Throwable ex) {

    }

    @Override
    public void addError(String msg) {

    }

    @Override
    public void addError(String msg, Throwable ex) {

    }




    /**
     * 当doccheck-engine启动两个进程时,使用--server.port指定端口号。这个端口号会放在日志文件名中。
     */
    public static void setLogbackPort(String[] args){
        if (args.length > 0){
            for (String arg : args){
                String[] paramArray = arg.split("=");
                if (paramArray.length > 1){
                    String key = paramArray[0];
                    String value = paramArray[1];
                    if (LOGBACK_PORT_PARAMETER.equals(key)){
                        logbackPort = value;
                        break;
                    }
                }
            }
        }
    }


}

Application调用并传递args


```package com.innovation.ic.sc.gateway;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.innovation.ic.b1b.util.LogbackConfigUtil;
import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication(scanBasePackages = "com.innovation.ic.sc")
@MapperScan("com.innovation.ic.sc.base.mapper")
@EnableDiscoveryClient
@EnableAutoConfiguration(exclude = {DruidDataSourceAutoConfigure.class})
public class SCGatewayApplication {

    private static final Logger log = LoggerFactory.getLogger(SCGatewayApplication.class);


    public static void main(String[] args) {
    	// 调用上面的工具类
        LogbackConfigUtil.setLogbackPort(args);
        SpringApplication.run(SCGatewayApplication.class, args);
        log.info("sc-gateway服务启动成功");
    }


}

logkacb配置文件


<configuration debug="false">
   <!-- class指向上面的工具类 -->
    <define name="webPort" class="com.innovation.ic.b1b.util.LogbackConfigUtil" />
     <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="../logs" />

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

    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名, %i 是必须要加上去的,是单个日志文件超大小后的切割序号-->
            <FileNamePattern>${LOG_HOME}/sc-gateway-${webPort}-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="com.innovation.ic.sc" level="INFO"/>
    <logger name="com.apache.ibatis" level="INFO"/>

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

启动参数idea测试,会生成一个sc-gateway-32222-2022-10-18.1.log文件,路径在项目的相对路径下的logs目录下

在这里插入图片描述

loback官网地址,学习一定要在官网文档学习,学习一定要在官网文档学习,学习一定要在官网文档学习。

loback文档官网地址

dev环境启动命令以及传递的端口参数

nohup java -jar /data/project/sc/sc-gateway/target/sc-gateway.jar --Xms1024M --Xmx2048M --XX:PermSize=256M --XX:MaxPermSize=256M --server.port=32101 --spring.application.name=sc-gateway >/data/project/log/sc-gateway32101.log 2>&1  &
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心有城府,腹有良谋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值