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的具体配置
<?xml version="1.0" encoding="UTF-8"?>
<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) %n
</pattern>
<charset>UTF-8
</charset>
</encoder>
</appender>
<appender name="service_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/logback-${serviceName}.log
</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${path}/service/logback-${serviceName}.%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>180
</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{ISO8601} %-5level %C{1} [%M:%L] [%thread] - %msg%n
</pattern>
<charset>UTF-8
</charset>
</encoder>
</appender>
<appender name="spring_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/logback-springFrameWork.log
</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${path}/spring/logback-springFrameWork.%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>180
</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{ISO8601} %-5level %C{1} [%M:%L] [%thread] - %msg%n
</pattern>
<charset>UTF-8
</charset>
</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}.log
</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${path}/service/interface-${serviceName}.%d{yyyy-MM-dd}.%i.log.zip
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>180
</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%msg%n
</pattern>
</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
;
public class Log {
public static Logger
get(Class
<?> clazz
) {
return LoggerFactory
.getLogger(clazz
);
}
public static Logger
get(String name
) {
return LoggerFactory
.getLogger(name
);
}
public static Logger
get() {
StackTraceElement
[] stackTrace
= Thread
.currentThread().getStackTrace();
return LoggerFactory
.getLogger(stackTrace
[2].getClassName());
}
public static void trace(String format
, Object
... arguments
) {
trace(innerGet(), format
, arguments
);
}
public static void trace(Logger log
, String format
, Object
... arguments
) {
log
.trace(format
, arguments
);
}
public static void debug(String format
, Object
... arguments
) {
debug(innerGet(), format
, arguments
);
}
public static void debug(Logger log
, String format
, Object
... arguments
) {
log
.debug(format
, arguments
);
}
public static void info(String format
, Object
... arguments
) {
info(innerGet(), format
, arguments
);
}
public static void info(Logger log
, String format
, Object
... arguments
) {
log
.info(format
, arguments
);
}
public static void warn(String format
, Object
... arguments
) {
warn(innerGet(), format
, arguments
);
}
public static void warn(Logger log
, String format
, Object
... arguments
) {
log
.warn(format
, arguments
);
}
public static void warn(Throwable e
, String format
, Object
... arguments
) {
warn(innerGet(), e
, format(format
, arguments
));
}
public static void warn(Logger log
, Throwable e
, String format
, Object
... arguments
) {
log
.warn(format(format
, arguments
), e
);
}
public static void error(String format
, Object
... arguments
) {
error(innerGet(), format
, arguments
);
}
public static void error(Logger log
, String format
, Object
... arguments
) {
log
.error(format
, arguments
);
}
public static void error(Throwable e
, String format
, Object
... arguments
) {
error(innerGet(), e
, format(format
, arguments
));
}
public static void error(Logger log
, Throwable e
, String format
, Object
... arguments
) {
log
.error(format(format
, arguments
), e
);
}
private static String
format(String template
, Object
... values
) {
return String
.format(template
.replace("{}", "%s"), values
);
}
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");
}
}