Java日志管理之logback

只要引入logback的依赖,就可以在控制台使用默认格式输出:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

 在resourses中创建logback.xml配置文件,就可以配置日志:

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义一个向控制台输出的追加器-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--
                %thread:线程名字
                %d:产生日志时间
                %level:产生日志的级别
                %logger{10}:由那个类产生的日志,如果超过10个长度则进行缩写
            -->
            <pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>
    <!--日志的最低输出级别为debug,输出地址为控制台-->
    <root level="debug">
        <appender-ref ref="console"/>
    </root>
</configuration>
复制代码

如果想配置日滚动文件,可以添加如下追加器:

复制代码
<!--RollingFileAppender追加器用于生成按天滚动的日志文件-->
<appender name="accessHistoryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--rollingPolicy滚动策略,TimeBasedRollingPolicy按照时间进行滚动-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!--配置日志存储路径-->
        <fileNamePattern>C:\java_study\project\restful\log\restful.%d.log</fileNamePattern>
    </rollingPolicy>
    <!--定义日志输出的格式-->
    <encoder>
        <pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
    </encoder>
</appender>

<!--AccessHistoryInterceptor这个类所产生的日志都会使用下面标签所产生的规则-->
<!--additivity是否向控制台输出,false在只会向指定规则下输出-->
<logger name="com.ikidana.restful.interceptor.AccessHistoryInterceptor" level="info" additivity="false">
    <appender-ref ref="accessHistoryLog"/>
</logger>
复制代码

然后就可以填入信息了:

复制代码
public class AccessHistoryInterceptor implements HandlerInterceptor {
    //创建一个logger日志对象
    private Logger logger = (Logger) LoggerFactory.getLogger(AccessHistoryInterceptor.class);

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        StringBuilder log = new StringBuilder();
        log.append(request.getRemoteAddr());  //地址
        log.append("|");
        log.append(request.getRequestURL());  //URL
        log.append("|");
        log.append(request.getHeader("user-agent"));
        logger.info(log.toString());
        return true;
    }
}
复制代码

 

posted @   明王不动心  阅读(518)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示