解决办法:
本人遇到的情况是因为 slf4j-api.jar包的版本过低,一直用的 1.7.7 的,但是很奇怪在本地写个Demo就没问题,整合到 SSM 就不生成日志文件了,后来改了下版本,slf4j-api.jar 用1.7.25,logback的包都用1.2.2 的,这样就一切正常了,情况有很多种,赶时间的小伙伴可以先试试我这个办法。下面是我整合的配置和代码,注解也比较详细。
pom配置
<properties>
<logback.version>1.2.2</logback.version>
</properties>
<dependencies>
<!-- SSM 框架整合 logback start -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.4</version>
</dependency>
<!-- logback end -->
</dependencies>
web.xml中配置
配置了logback配置文件的加载路径和监听
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:config/logback.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
logback.xml配置
本人用的是按每天日期先生成文件夹,再生成日志文件,并且控制每个日志文件的大小和保留天数,下面是具体配置,注解比较详细。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--读取配置中心的属性-->
<!--<springProperty scope="context" name="name" source="spring.application.name"/>可行-->
<!--日志输出位置-->
<property name="LOG_HOME" value="G:\log"/>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<property name="LOG_PATTERN_CONSOLE"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %clr(${LOG_LEVEL_PATTERN:-%5p}) %logger{50}:%L - %msg%n"/>
<property name="LOG_PATTERN_FILE"
value="%msg%n"/>
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>
${LOG_PATTERN_CONSOLE}
</pattern>
</encoder>
</appender>
<!--输出到文件-->
<appender name="fileLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/%d{yyyyMMdd}/myLogInfo.%d{yyyyMMddHHmmss}.%i.log</FileNamePattern>
<!--单个日志大小-->
<maxFileSize>10KB</maxFileSize>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN_FILE}</pattern>
</encoder>
</appender>
<appender name="fileLogError" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/%d{yyyyMMdd}/myLogError.%d{yyyyMMddHHmmss}.%i.log</FileNamePattern>
<!--单个日志大小-->
<maxFileSize>10KB</maxFileSize>
<!--日志文件保留天数-->
<maxHistory>7</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${LOG_PATTERN_CONSOLE}</pattern>
</encoder>
</appender>
<!--配置异步日志-->
<appender name="consoleName" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="console"/>
</appender>
<appender name="fileLogName" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="fileLog"/>
</appender>
<appender name="fileLogErrorName" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="fileLogError"/>
</appender>
<!-- 日志在工程中的输出位置 -->
<!--<property name="LOG_FILE" value="${LOG_HOME}/${name}"/>-->
<root level="info">
<appender-ref ref="console"/>
<!--日志输出文件 -->
<appender-ref ref="fileLog"/>
<appender-ref ref="fileLogError"/>
</root>
<logger name="java.sql.Connection" level="INFO"/>
<logger name="java.sql.Statement" level="INFO"/>
<logger name="java.sql.PreparedStatement" level="INFO"/>
</configuration>
代码格式
到这部分基本都已经没什么可看的了,但还是发出来吧,因为本人之前也被import的引入坑过,还是付上供参考吧,是Logger和LoggerFactory这两个引入
package com.ssm.controller;
import com.ssm.service.TestServiceInterface;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/abc")
public class TestSpringController {
private static Logger logger= LoggerFactory.getLogger(TestSpringController.class);
@Autowired
private TestServiceInterface serviceInterface;
@RequestMapping("/ttt")
public String testRequest(){
String s = serviceInterface.testServcie();
logger.error("logback is success!");
return s;
}
@RequestMapping(method = RequestMethod.GET, value = "/add", headers = "Accept=application/json")
public
@ResponseBody
Map add() {
Map<String ,String> map = new HashMap<>();
map.put("name","张三");
return map;
}
}
(完)