Spring 利用logback输出打印日志:

本文介绍了如何在Spring项目中使用logback进行日志输出。首先,需要在pom.xml中排除slf4j-log4j12的依赖,并添加logback的相关jar包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring 利用logback输出打印日志:

一、pom.xml中添加相应的jar包

1、首先由于logback的jar包与slf4j-log4j12冲突,所以先去掉相关的jar包:

<!--<dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <version>1.7.16</version>
    </dependency>-->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.3.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-auth</artifactId>
        <version>2.3.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.3.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>


    2、添加logback的相应jar包:
   <!-- logback -->
    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.6.0</version>
    </dependency>
    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>log4j-over-slf4j</artifactId>
       <version>1.6.0</version>
    </dependency>
    <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-core</artifactId>
       <version>0.9.29</version>
    </dependency>
    <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-classic</artifactId>
       <version>0.9.29</version>
    </dependency>
    <dependency>
       <groupId>ch.qos.logback</groupId>
       <artifactId>logback-access</artifactId>
       <version>0.9.29</version>
    </dependency>
    <dependency>  
       <groupId>org.logback-extensions</groupId>  
       <artifactId>logback-ext-spring</artifactId>  
       <version>0.1.2</version>  
    </dependency>


 二、在web.xml中配置监听

    <context-param>  
         <param-name>logbackConfigLocation</param-name>  
         <param-value>/WEB-INF/config/logback.xml</param-value>  
    </context-param>  
    <listener>  
         <listener-class>
             ch.qos.logback.ext.spring.web.LogbackConfigListener
         </listener-class>  
    </listener>


三、将logback的配置文件logback.xml放在/WEB-INF/config/文件夹下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/opt/search/nimitzlogs" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 日志输出编码 -->
        <Encoding>UTF-8</Encoding>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
            </pattern>
        </layout>
    </appender>
    <!-- 为了把不同的信息打印到不同的文件中,这里设置了不同的日志级别打印到不同文件中 -->
    <appender name="FILEINFO"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<file>${LOG_HOME}/log-user.log</file>-->
        <Encoding>UTF-8</Encoding>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--用户行为操作的日志打印到以log-user开头的文件中 -->
            <FileNamePattern>${LOG_HOME}/log-user.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 最多30个文件 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} [%file:%line] - %msg%n
            </pattern>
        </layout>
        <!--日志文件最大的大小--><!-- xiaozhao 每天生成新文件 -->
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>30MB</MaxFileSize>
        </triggeringPolicy>-->
        <!-- 过滤器,只记录INFO级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <appender name="FILEERROR"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<file>${LOG_HOME}/log-error.log</file>-->
        <Encoding>UTF-8</Encoding>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--在工程目录下自动生成logs文件夹 -->
            <FileNamePattern>${LOG_HOME}/log-error.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!-- 最多30个文件 -->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} [%file:%line] - %msg%n
            </pattern>
        </layout>
        <!--日志文件最大的大小--><!-- xiaozhao 每天生成新文件 -->
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>30MB</MaxFileSize>
        </triggeringPolicy>-->
        <!-- 过滤器,只记录ERROR级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 日志输出级别 输出INFO以上级别-->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILEINFO"/>
        <appender-ref ref="FILEERROR"/>
    </root>
    <!-- 日志输出级别 -->
    <logger name="org.springframework" level="ERROR">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR" />
    </logger>
    <logger name="org.apache.solr" level="ERROR">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR" />
    </logger>
    <logger name="net.paoding" level="ERROR">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR" />
    </logger>
    <logger name="org.apache.commons" level="ERROR">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILEINFO" />
        <appender-ref ref="FILEERROR" />
    </logger>


</configuration>


四、测试:
import org.slf4j.Logger;  
import org.slf4j.LoggerFactory;  
  
public class Test {  
      private Logger log = LoggerFactory.getLogger(UsrController.class);  
     public String login(HttpServletRequest request) {  
            String username = request.getParameter("username");  
            String password = request.getParameter("password");  
            log.info("username:{}  and pwd:{}", username, password);  
            return null;  
    }  
}  
### 配置 logback-spring.xml 实现日志打印Spring Boot 项目中,`logback-spring.xml` 是用于自定义日志配置的核心文件。以下是关于如何正确配置 `logback-spring.xml` 来实现日志打印的具体方法。 #### 日志配置概述 Spring Boot 启动时会优先加载名为 `logback-spring.xml` 的文件作为日志系统的配置文件[^2]。如果没有找到此文件,则会退而求其次寻找 `logback.xml` 文件。由于 `logback-spring.xml` 支持更多高级功能(如 `${}` 占位符解析和基于 profile 的条件化配置),因此推荐使用它来进行日志管理。 #### 使用占位符引入外部属性 可以通过 `${}` 占位符机制,在 `logback-spring.xml` 中引用来自 `application.yml` 或者 `application.properties` 定义的变量。例如: ```xml <!-- application.yml --> logging: path: /var/log/myapp/ <!-- logback-spring.xml --> <configuration> <!-- 将 logging.path 属性映射到 log.path --> <property name="LOG_PATH" value="${logging.path}" /> <!-- 设置日志文件名 --> <property name="LOG_FILE_NAME" value="my-application.log" /> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 文件输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${LOG_FILE_NAME}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <!-- Root logger level --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration> ``` 上述代码片段展示了如何设置控制台和文件两种类型的 appender,并利用滚动策略按日期归档日志文件[^4]。 #### 特殊场景下的优化建议 为了适应更复杂的应用需求,可以进一步扩展配置逻辑: - **多环境适配**:借助 `<springProfile>` 标签实现针对开发、测试或生产环境的不同日志级别与路径设定。 ```xml <springProfile name="dev"> <root level="debug"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <springProfile name="prod"> <root level="warn"> <appender-ref ref="FILE"/> </root> </springProfile> ``` - **权限校验**:确保指定的日志目录存在且应用程序对该目录拥有写入权限。 #### 总结 通过合理设计 `logback-spring.xml` 文件结构以及灵活运用其内置特性,能够显著提升项目的可维护性和运行效率。务必注意实际部署环境中可能存在的差异性因素,比如操作系统类型或者磁盘空间限制等问题的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值