springboot中配置logback日志配置

最近对公司的现有日志进行了处理,使用的是logback

需求是按照级别输出,同时能按照业务将日志写入不同文件中。

以下是我的配置文件,直接放入resource目录下即可运行

logback.xml文件

其中日志格式这块因为我加入了zipkin生产traceid的逻辑,实现链路追踪,方便知道分布式中服务间调用关系,实际使用中删除掉即可

<?xml version="1.0" ?>
<!-- 日志输出规则  根据当前ROOT级别,日志输出时,级别高于root默认的级别时  会输出 -->
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 属性描述 scan:性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true 
	scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="30 seconds">
	<!-- 日志上下文名称 -->
	<contextName>OPENAPI-LOGGING</contextName>
	<!-- 日志最大的历史 30天 -->
    <property name="maxHistory" value="30"/>
	<!-- 定义日志文件 输入位置 -->
    <property name="log_dir_sys" value="./logs/openapi/sys" />
    <property name="log_dir_business" value="./logs/openapi/business" />
    <!--==================指定输出位置=================-->
    <!--++++++++++++++++++输出到控制台++++++++++++++++++++++++++++++-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 输出格式 -->
        <encoder charset="UTF-8">
            <pattern>[%boldRed(%d{HH:mm:ss.SSS})] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %highlight(%level) [%boldRed(%thread)] %boldMagenta([%file:%line]) - %cyan(%msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <!--==================指定级别输出文件=================-->
	<!--++++++++++++++++++记录文件(按日志级别输出INFO)+++++++++++++++++-->
    <appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_sys}/info.log</File>
        <append>true</append>
        <!--过滤器,只打INFO级别的日志-->
        <!-- 级别过滤 -->
    	<filter class="ch.qos.logback.classic.filter.LevelFilter">
    		<!-- 日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <level>INFO</level>
            <!-- 用于配置符合过滤条件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_sys}/%d{yyyy-MM-dd}/info.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
	
	<!--++++++++++++++++++记录文件(按日志级别输出ERROR)+++++++++++++++++-->
    <appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_sys}/error.log</File>
        <append>true</append>
        <!--过滤器,只打INFO级别的日志-->
        <!-- 级别过滤 -->
    	<filter class="ch.qos.logback.classic.filter.LevelFilter">
    		<!-- 日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志。 -->
            <level>ERROR</level>
            <!-- 用于配置符合过滤条件的操作 -->
            <onMatch>ACCEPT</onMatch>
            <!-- 用于配置不符合过滤条件的操作 -->
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_sys}/%d{yyyy-MM-dd}/error.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>


	<!--==================不同业务逻辑的日志打印到不同文件=================-->
    <appender name="BUSINESS_USER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_business}/user/business_user.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_business}/user/%d{yyyy-MM-dd}/business_user.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

	<appender name="BUSINESS_ORDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_business}/order/business_order.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_business}/order/%d{yyyy-MM-dd}/business_order.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <appender name="BUSINESS_QRCODE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_business}/qrcode/business_qrcode.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_business}/qrcode/%d{yyyy-MM-dd}/business_qrcode.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <appender name="BUSINESS_ADMIN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_business}/admin/business_admin.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_business}/admin/%d{yyyy-MM-dd}/business_admin.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    <appender name="BUSINESS_TICKET" class="ch.qos.logback.core.rolling.RollingFileAppender">
    	<File>${log_dir_business}/ticket/business_ticket.log</File>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_dir_business}/ticket/%d{yyyy-MM-dd}/business_ticket.%d{MM-dd}.log</fileNamePattern>
			<!-- 开启日志保留天数,大于30天后自动删除 -->
            <maxHistory>30</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>[%d{HH:mm:ss.SSS}] %contextName [%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}] %level [%thread] [%file:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    
    
    <!-- 不同的业务逻辑日志打印到指定文件夹-->
    <logger name="businessUser" additivity="false" level="debug">
        <appender-ref ref="BUSINESS_USER"/>
    </logger>
    <logger name="businessOrder" additivity="false" level="debug">
        <appender-ref ref="BUSINESS_ORDER"/>
    </logger>
    <logger name="qrCode" additivity="false" level="debug">
        <appender-ref ref="BUSINESS_QRCODE"/>
    </logger>
    <logger name="admin" additivity="false" level="debug">
        <appender-ref ref="BUSINESS_ADMIN"/>
    </logger>
    <logger name="ticket" additivity="false" level="debug">
        <appender-ref ref="BUSINESS_TICKET"/>
    </logger>

    <!--info和error分开打印-->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="SYS_INFO"/>
        <appender-ref ref="SYS_ERROR"/>
    </root>

</configuration>

LogFileName.java 枚举常量

public enum LogFileName {

    //配置到logback.xml中的logger name="businessUser"
    USERLOG("businessUser"),
    ORDERLOG("businessOrder"),
	QRCODELOG("qrCode"),
	ADMINLOG("admin"),
	TICKETLOG("ticket");
	

    private String logFileName;

    LogFileName(String fileName) {
        this.logFileName = fileName;
    }

    public String getLogFileName() {
        return logFileName;
    }

    public void setLogFileName(String logFileName) {
        this.logFileName = logFileName;
    }
}

LoggerUtils.java

public class LoggerUtils {
    public static <T> org.slf4j.Logger Logger(Class<T> clazz) {
        return LoggerFactory.getLogger(clazz);
    }

    /**
     * 打印到指定的文件下
     *
     * @param desc 日志文件名称
     * @return
     */
    public static org.slf4j.Logger Logger(LogFileName desc) {
        return LoggerFactory.getLogger(desc.getLogFileName());
    }
}

AppTest.java测试类

@SpringBootTest(classes = ApplicationOpenApi.class)
public class AppTest {
	Logger USERLOG = LoggerUtils.Logger(LogFileName.USERLOG);
	Logger ORDERLOG = LoggerUtils.Logger(LogFileName.ORDERLOG);
	Logger QRCODELOG = LoggerUtils.Logger(LogFileName.QRCODELOG);
	Logger ADMINLOG = LoggerUtils.Logger(LogFileName.ADMINLOG);
	Logger TICKETLOG = LoggerUtils.Logger(LogFileName.TICKETLOG);
	Logger logger = LoggerFactory.getLogger(AppTest.class);

	@Test
	public void testGetBusinessAccount() throws Exception {
		String a="123";
		Map<String,Object> map = new HashMap<String, Object>();
		map.put("1", 123);
		map.put("2", "456");
		System.out.println("2");
		logger.warn("324234244234wsrwerwer");
		logger.debug("324234244234wsrwerwer");
		logger.error("324234244234wsrwerwer");
		USERLOG.info("用户日志map:[{}]---string:[{}]",map,a);
		ORDERLOG.info("订单日志");
		QRCODELOG.info("二维码日志");
		ADMINLOG.info("用户管理后台日志");
		USERLOG.error("用户日志");
		ORDERLOG.error("订单日志");
		QRCODELOG.error("二维码日志");
		ADMINLOG.error("用户管理后台日志");
		TICKETLOG.error("车票日志");
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值