SpringBoot整合logback-spring.xml配置

SpringBoot整合Logback

    • 集成到springboot的yml格式配置文件的示例
    • logback的具体配置
    • 创建Log.java工具类
    • 测试

集成到springboot的yml格式配置文件的示例

logback:
  path: /data/logs
  serviceName: demo-sdk
logging:
  config: classpath:logback/logback-spring.xml
  level:
    dao: debug
    org:
      mybatis: debug

logback的具体配置


<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <springProperty scope="context" name="serviceName" source="logback.serviceName"/>
    <springProperty scope="context" name="path" source="logback.path"/>

    
    <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} [%thread] %highlight(%-5level) %cyan(%logger{50}) - %highlight(%msg) %npattern>
            <charset>UTF-8charset> 
        encoder>
    appender>

    
    <appender name="service_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/logback-${serviceName}.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${path}/service/logback-${serviceName}.%d{yyyy-MM-dd}.%i.log.zipfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>180maxHistory>
        rollingPolicy>

        
        <encoder>
            <pattern>%d{ISO8601} %-5level %C{1} [%M:%L] [%thread] - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
    appender>

    
    <appender name="spring_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/logback-springFrameWork.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/spring/logback-springFrameWork.%d{yyyy-MM-dd}.%i.log.zipfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>180maxHistory>
        rollingPolicy>

        <encoder>
            <pattern>%d{ISO8601} %-5level %C{1} [%M:%L] [%thread] - %msg%npattern>
            <charset>UTF-8charset> 
        encoder>
    appender>

    
    
        
    
    <root level="debug">
        <appender-ref ref="STDOUT"/>
    root>



    
    <appender name="oper_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${path}/interface-${serviceName}.logfile>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${path}/service/interface-${serviceName}.%d{yyyy-MM-dd}.%i.log.zipfileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MBmaxFileSize>
            timeBasedFileNamingAndTriggeringPolicy>
            
            <maxHistory>180maxHistory>
        rollingPolicy>

        <encoder>
            <pattern>%msg%npattern>
        encoder>
    appender>

    
    <logger name="oper_file">
        <appender-ref ref="oper_file">appender-ref>
    logger>

    
    
    <logger name="com.demo" level="DEBUG"  additivity="true">
        <appender-ref ref="service_file">appender-ref>
    logger>
    
    <logger name="org.springframework" level="info"  additivity="true">
        <appender-ref ref="spring_file">appender-ref>
    logger>
configuration>

创建Log.java工具类

package com.demo.common.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

    /**
    * 

Description: [log日志工厂类]

*/
public class Log { /** *

Discription:[获得Logger]

* * @param clazz 日志发出的类 * @return */
public static Logger get(Class<?> clazz) { return LoggerFactory.getLogger(clazz); } /** *

Discription:[获得Logger]

* * @param name 自定义的日志发出者名称 * @return */
public static Logger get(String name) { return LoggerFactory.getLogger(name); } /** *

Discription:[获得日志,自动判定日志发出者]

* * @return */
public static Logger get() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); return LoggerFactory.getLogger(stackTrace[2].getClassName()); } /** *

Discription:[Trace等级日志,小于debug--由于动态获取Logger,效率较低,建议在非频繁 调用的情况下使用!!]

* * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void trace(String format, Object... arguments) { trace(innerGet(), format, arguments); } /** *

Discription:[Trace等级日志,小于Debug]

* * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void trace(Logger log, String format, Object... arguments) { log.trace(format, arguments); } /** *

Discription:[Debug等级日志,小于Info--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void debug(String format, Object... arguments) { debug(innerGet(), format, arguments); } /** *

Discription:[Debug等级日志,小于Info]

* * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void debug(Logger log, String format, Object... arguments) { log.debug(format, arguments); } /** *

Discription:[Info等级日志,小于Warn--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void info(String format, Object... arguments) { info(innerGet(), format, arguments); } /** *

Discription:[Info等级日志,小于Warn]

* * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void info(Logger log, String format, Object... arguments) { log.info(format, arguments); } /** *

Discription:[Warn等级日志,小于Error--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void warn(String format, Object... arguments) { warn(innerGet(), format, arguments); } /** *

Discription:[Warn等级日志,小于Error]

* * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void warn(Logger log, String format, Object... arguments) { log.warn(format, arguments); } /** *

Discription:[Warn等级日志,小于Error--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void warn(Throwable e, String format, Object... arguments) { warn(innerGet(), e, format(format, arguments)); } /** *

Discription:[Warn等级日志,小于Error]

* * @param log 日志对象 * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void warn(Logger log, Throwable e, String format, Object... arguments) { log.warn(format(format, arguments), e); } /** *

Discription:[Error等级日志--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void error(String format, Object... arguments) { error(innerGet(), format, arguments); } /** *

Discription:[Error等级日志]

* * @param log 日志对象 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void error(Logger log, String format, Object... arguments) { log.error(format, arguments); } /** *

Discription:[Error等级日志--由于动态获取Logger,效率较低,建议在非频繁调用的情况下使用!!]

* * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void error(Throwable e, String format, Object... arguments) { error(innerGet(), e, format(format, arguments)); } /** *

Discription:[Error等级日志 ]

* * @param log 日志对象 * @param e 需在日志中堆栈打印的异常 * @param format 格式文本,{} 代表变量 * @param arguments 变量对应的参数 */
public static void error(Logger log, Throwable e, String format, Object... arguments) { log.error(format(format, arguments), e); } /** *

Discription:[格式化文本]

* * @param template 文本模板,被替换的部分用 {} 表示 * @param values 参数值 * @return 格式化后的文本 */
private static String format(String template, Object... values) { return String.format(template.replace("{}", "%s"), values); } /** *

Discription:[获得日志,自动判定日志发出者]

* * @return */
private static Logger innerGet() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); return LoggerFactory.getLogger(stackTrace[3].getClassName()); } }

测试

import org.slf4j.Logger;
import com.demo.common.utils.Log;

public class LogDemo {
     

	private static Logger log = Log.get(CustomerServiceImpl.class);

    public static void main(String[] args) {
     
    	Log.debug(log, "\n 方法[{}],入参:[{}][{}]", "LogDemo-main", "参数1","参数2");
        log.debug("debug");
    }
}

你可能感兴趣的:(SpringBoot,日志,java,logback)