@Slf4j的topic属性作用

詹学伟
詹学伟
发布于 2024-04-27 / 19 阅读
2
0

@Slf4j的topic属性作用

AI解释

在 Java 中,`@Slf4j` 是 Lombok 提供的一个注解,用于自动生成日志对象。它可以简化在类中创建日志对象的过程,避免了手动编写日志对象的代码。使用 @Slf4j 注解后,可以通过 log 对象来记录日志,而无需手动创建 Logger 对象。

@Slf4jtopic 属性可以指定日志的主题(topic),这在日志记录和过滤中非常有用。通过指定 topic 属性,你可以将不同类中的日志记录到同一个主题下,这有助于对日志进行分类和分析。例如,你可以为特定功能或模块设置不同的主题,以便更好地组织和管理日志信息。

以下是一个简单的示例,演示了如何在使用 @Slf4j 注解时指定 topic 属性:

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "MyCustomTopic")
public class MyClass {
    public void myMethod() {
        log.info("Logging information message");
        log.error("Logging error message");
    }
}

在上面的示例中,我们为 MyClass 类指定了 topic = "MyCustomTopic",这意味着该类中生成的日志将被归类到名为 "MyCustomTopic" 的主题下面。

实践效果

package com.ale.juc.controller;

import com.ale.juc.common.api.ApiResult;
import com.ale.juc.common.api.PageResult;
import com.ale.juc.common.constant.ApiConst;
import com.ale.juc.entity.user.UserDTO;
import com.ale.juc.entity.user.UserVo;
import com.ale.juc.service.UserService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * <p>
 * 用户接口
 * </p>
 *
 * @author zhanxuewei
 * @since 2024-04-27
 */
@Api(tags = "用户接口", description = "UserController")
@RestController
@RequestMapping(ApiConst.API_PREFIX + "/user")
@Slf4j
public class UserController {

    @Autowired
    private UserService userService;

    @ApiOperation("列表条件分页查询")
    @GetMapping("/pageList")
    public ApiResult<PageResult<UserVo>> pageList(UserDTO dto) {
        log.info("列表条件分页查询");
        IPage<UserVo> page = userService.pageList(dto);
        return ApiResult.success(PageResult.restPage(page, page.getRecords()));
    }


}

可以看到不定义topic的话,打印日志的时候,这里展示类的全名称

我们再来添加一个topic试试:

package com.ale.juc.controller;

import com.ale.juc.common.api.ApiResult;
import com.ale.juc.common.api.PageResult;
import com.ale.juc.common.constant.ApiConst;
import com.ale.juc.entity.user.UserDTO;
import com.ale.juc.entity.user.UserVo;
import com.ale.juc.service.UserService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


/**
 * <p>
 * 用户接口
 * </p>
 *
 * @author zhanxuewei
 * @since 2024-04-27
 */
@Api(tags = "用户接口", description = "UserController")
@RestController
@RequestMapping(ApiConst.API_PREFIX + "/user")
@Slf4j(topic = "demoTopic")
public class UserController {

    @Autowired
    private UserService userService;

    @ApiOperation("列表条件分页查询")
    @GetMapping("/pageList")
    public ApiResult<PageResult<UserVo>> pageList(UserDTO dto) {
        log.info("列表条件分页查询");
        IPage<UserVo> page = userService.pageList(dto);
        return ApiResult.success(PageResult.restPage(page, page.getRecords()));
    }
}

可以看到打印结果,这里展示的是我们定义的topic的值。

用@slf4j好久,今天第一次看到别人使用topic这个属性,比较好奇,所以了解了一下,还是比较有意思的(虽然看起来作用好似多余,哈哈😄)


评论