SpringBoot -> SLF4j日志官方示例--附加:打印到文件

本文介绍了SpringBoot项目中如何利用内置的SLF4J进行日志记录,无需额外导入jar包。示例代码展示了如何创建Logger实例,并通过LoggerFactory获取。同时,文章提到了在maven配置中指定slf4j-api的版本为2.0.0-alpha1。此外,还讲解了如何在yaml配置文件中设置日志输出到C盘的spring.log或spring.txt文件,以及日志打印级别。

提示:springboot内部自带slf4j,不用导入jar包,可以直接使用LoggerFactory.getLogger

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

public class HelloWorld {
  public static void main(String[] args) {
    //HelloWorld.class可以改成getClass();获取运行时类
    //这个定义最好放在成员变量的位置
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    //info:打印的级别,级别可以百度,不同级别输出的日志可能会有多或少,有的多的找不到
    //现在要不能直接使用string,需要使用一个函数式接口重写一个get
    //logger.info(() -> "Hello World");
    logger.info("Hello World");
  }
}

maven的jar包–默认下载2.0.0及其以下所有版本

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.0-alpha1</version>
</dependency>

打印到文件–yaml文件中

打印到c盘中,名字是spring.log,格式是log

logging:
  file:
    name: c:/spring.log

在这里插入图片描述

logging:
  file:
    name: c:/spring.txt

在这里插入图片描述

这是我的logback-spring.xml配置文件内容。我现在作为网关服务,对于外部服务调用API的记录需要单独保存在另外的日志文件中,我的API调用日志工具代码如下,请为我提供该日志文件的配置以及如何使用,以保证和我系统的运行日志区分开 logback-spring.xml: <?xml version="1.0" encoding="UTF-8"?> <configuration> <contextName>gateway</contextName> <!--<property name="LOG_HOME" value=".logs" />--> <!--设置表达式--> <!--%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{80} -%msg%n --> <property name="DEFAULT_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID} --- [%25thread] %-40logger{16} Line:%-4line : %msg%n" /> <!-- 按照每天生成日志文件 --> <appender name="LINUX_ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名 ,每天保存(侧翻)一次 --> <FileNamePattern>/data/logs/irs-dataexchange-gateway/irs-dataexchange-gateway-%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数 --> <MaxHistory>10</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${DEFAULT_PATTERN}</pattern> <charset>utf-8</charset> </encoder> </appender> <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"> <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多只能添加一个 --> <appender-ref ref ="LINUX_ROLLING_FILE"/> <!--<appender-ref ref ="errorAppender"/>--> </appender> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder默认配置为PartternLayoutEncoder --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>${DEFAULT_PATTERN}</pattern> <charset>utf-8</charset> </encoder> </appender> <!-- 根据不同环境设置级别 --> <springProfile name="dev"> <root level="DEBUG"> <appender-ref ref="ASYNC" /> <appender-ref ref="STDOUT" /> <appender-ref ref="LINUX_ROLLING_FILE" /> </root> </springProfile> <springProfile name="test"> <!-- 测试环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能 --> <root level="INFO"> <appender-ref ref="ASYNC" /> <appender-ref ref="STDOUT" /> <appender-ref ref="LINUX_ROLLING_FILE" /> </root> </springProfile> <springProfile name="local"> <root level="DEBUG"> <appender-ref ref="ASYNC" /> <appender-ref ref="STDOUT" /> <appender-ref ref="LINUX_ROLLING_FILE" /> </root> </springProfile> </configuration> 日志工具: import com.cmict.irs.outside.gateway.vo.LogParam; import com.cmict.irs.outside.gateway.vo.apiinfo.ApiInfo; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; @Component public class LogUtil { public static LogParam initLogParam(ServerWebExchange exchange) { // 初始化日志参数 LogParam logParam = new LogParam(); // TODO 设置默认值或从exchange中提取信息 // TODO 这里可以根据实际需求填充logParam的属性 return logParam; } public static void sendLogMessage(ServerWebExchange exchange, boolean success, String message, byte[] data, String status, ApiInfo apiInfo) { // 发送日志消息 // TODO 这里可以根据实际需求实现日志记录逻辑 System.out.println("Log sent: " + message); } public static void sendLogMessage(ServerWebExchange exchange, boolean success, String message, byte[] data, String status) { sendLogMessage(exchange, success, message, data, status, null); } public static final String LOG_START_TIME = "log_start_time"; public static final String LOG_FLOW_RULE_ID = "log_flow_rule_id"; public static final String LOG_FLOW_RULE_TYPE = "log_flow_rule_type"; public static final String LOG_FLOW_RULE_WINDOWS_TIME = "log_flow_rule_windows_time"; public static final String LOG_FLOW_RULE_API_Flow = "log_flow_rule_api_flow"; }
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值