在pom.xml文件中添加以下依赖:
org.springframework.boot
spring-boot-starter
ch.qos.logback
logback-classic
在src/main/resources目录下创建logback.xml文件,并添加以下配置:
<configuration>
<property name="LOG_HOME" value="/path/to/logs"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.logfileNamePattern>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
<logger name="com.example" level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
logger>
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
root>
configuration>
其中,LOG_HOME为日志文件输出路径,可以根据需要进行修改。
下面是logback.xml配置文件的主要内容:
<property name="LOG_HOME" value="/path/to/logs"/>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
定义了日志输出的格式,包括时间、线程、日志级别、类名、日志信息等。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/app.logfile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.logfileNamePattern>
<maxHistory>30maxHistory>
rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%npattern>
encoder>
appender>
定义了日志输出的方式,包括控制台输出和文件输出。其中,文件输出使用了滚动策略,即以时间为基准,每天生成一个
在应用程序中使用日志,可以使用以下方式:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
public void myMethod() {
logger.debug("Debug log message");
logger.info("Info log message");
logger.warn("Warn log message");
logger.error("Error log message");
}
}
或者使用Lombok @Slf4j 注解 参考:https://blog.csdn.net/qq_20299791/article/details/89852458
<configuration scan="true" scanPeriod="3 seconds">
<property resource="application.yml"/>
<property name="LOG_PATH" value="/opt/log/"/>
<springProperty scope="context" name="appName" source="spring.application.name" defaultValue="ho-cc"/>
<springProperty scope="context" name="env" source="spring.profiles.active"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-6p) --- [%yellow(%15.15t)] [%X{requestId}] %cyan(%-40.40logger{39}) : %msg%nPattern>
encoder>
appender>
<appender name="flowlog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${appName}/flowlog/flowlog.logFile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}${appName}/flowlog/flowlog-%d{yyyyMMdd}-%i.logfileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>30MBmaxFileSize>
timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10maxHistory>
<totalSizeCap>2GBtotalSizeCap>
rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-6p --- [%15.15t] [%X{requestId}] %-40.40logger{39} : %msg%nPattern>
layout>
appender>
<appender name="accDetail" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${appName}/accDetail/accdetail.logFile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}${appName}/accDetail/accdetail-%d{yyyyMMdd}-%i.logfileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>30MBmaxFileSize>
timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>1maxHistory>
<totalSizeCap>1GBtotalSizeCap>
rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern> %msg%n Pattern>
layout>
appender>
<appender name="logELK" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${appName}/metriclog/callCenter.logFile>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}${appName}/metriclog/callCenter-%d{yyyyMMdd}-%i.logfileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>30MBmaxFileSize>
timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>1maxHistory>
<totalSizeCap>1GBtotalSizeCap>
rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%msg%nPattern>
layout>
appender>
<logger name="com.wintelia" level="debug"/>
<logger name="com.elk.aspect" level="info" additivity="false">
<appender-ref ref="logELK"/>
logger>
<logger name="com.accDetail.aspect" level="info" additivity="false">
<appender-ref ref="accDetail"/>
logger>
<springProfile name="dev,test">
<logger name="com.wintelia" level="debug"/>
<logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/>
<logger name="org.apache.catalina.util.LifecycleBase" level="ERROR"/>
<logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/>
<logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN"/>
<logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/>
<logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="ERROR"/>
<logger name="org.hibernate.validator.internal.util.Version" level="WARN"/>
springProfile>
<springProfile name="prod,uat">
<logger name="com.wintelia" level="info"/>
springProfile>
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="flowlog"/>
root>
configuration>