SSM到SpringBoot(校园商铺)6

本文详细介绍了从SSM框架迁移到SpringBoot框架时,如何配置Logback日志系统。包括Logback的核心模块、主要标签、配置文件的创建与设置,以及如何通过不同级别的日志Appender进行日志输出。并通过一个具体的校园商铺项目案例,展示了Logback配置的实际应用。

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

SSM到SpringBoot(校园商铺)

Logback日志:

Logback的主要模块:

  • logback-core:其它两个模块的基础模块
  • logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging
  • logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能

Logback的主要标签:

  • Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型、级别。
  • Appender主要用于指定日志输出的目的地,目的地可以是控制台、文件、远程套接字服务器、 MySQL、PostreSQL、 Oracle和其他数据库、 JMS和远程UNIX Syslog守护进程等。
  • Layout 负责把事件转换成字符串,格式化的日志信息的输出。

Logback的配置:

在src/main/resources下创建logback.xml

注意在写的时候千万要细心,我就是因为几个小的错误导致一晚上都在找错误,浪费了大把时间。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 每60s自动重新加载配置文件 -->
<configuration scan="true" scanPeriod="60 seconds"
	debug="false">

	<!-- 定义参数常量 -->
	<!-- 日志级别 case<debug<info<warn<error -->
	<property name="log.level" value="debug" />
	<!-- 保存30天内的日志 -->
	<property name="log.maxHistory" value="30" />
	<!-- 日志存储的根路径 tomcat实例的根目录 -->
	<property name="log.filePath"
		value="${catalina.base}/logs/webapps" />
	<!-- 日志展现的格式 时间 线程 日志级别 package+class 日志信息 -->
	<property name="log.pattern"
		value="%d{yyyy-MM-dd HH:mm:ss.sss} [%thread] %-5level %logger{50} - %msg%n" />
	
	<!-- 日志输出的目的地console -->
	<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
		<!-- 日志信息格式化为字符串并输出到相应文件中 -->
		<encoder>
			<pattern>${log.pattern}</pattern>	
		</encoder>
	</appender>
	<!-- 日志输出的目的地DEBUG -->
	<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/debug.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 自动压缩为gz文件 -->
			<fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
			<!-- 文件保存最大历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<!-- 日志信息格式化为字符串并输出到相应文件中 -->
		<encoder>
			<pattern>${log.pattern}</pattern>	
		</encoder>
		<!-- 过滤掉不是debuglevel的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<!-- 日志输出的目的地INFO -->
	<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/info.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 自动压缩为gz文件 -->
			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
			<!-- 文件保存最大历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<!-- 日志信息格式化为字符串并输出到相应文件中 -->
		<encoder>
			<pattern>${log.pattern}</pattern>	
		</encoder>
		<!-- 过滤掉不是infolevel的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	<!-- 日志输出的目的地ERROR -->
	<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 文件路径 -->
		<file>${log.filePath}/error.log</file>
		<!-- 滚动策略 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 自动压缩为gz文件 -->
			<fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
			<!-- 文件保存最大历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy>
		<!-- 日志信息格式化为字符串并输出到相应文件中 -->
		<encoder>
			<pattern>${log.pattern}</pattern>	
		</encoder>
		<!-- 过滤掉不是errorlevel的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<!-- name:监听包com.hytxwz.o2o  addtivity="true":引入父类中的appender-ref -->
	<logger name="com.hytxwz.o2o" level="${log.level}" addtivity="true">
		<appender-ref ref="debugAppender" />
		<appender-ref ref="infoAppender" />
		<appender-ref ref="errorAppender" />
	</logger>
	
	<!-- 父类logger -->>
	<root level="info">
		<appender-ref ref="consoleAppender" />
	</root>
	
</configuration>

验证配置:

package com.hytxwz.o2o.web.superadmin;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 com.hytxwz.o2o.entity.Area;
import com.hytxwz.o2o.service.AreaService;

@Controller
@RequestMapping("/superadmin")
public class AreaController {

	Logger logger = LoggerFactory.getLogger(AreaController.class);

	@Autowired
	private AreaService areaService;

	@RequestMapping(value = "/listarea", method = RequestMethod.GET)
	@ResponseBody // 以JSON形式返回结果
	public Map<String, Object> getAreaList() {
		logger.info("===start===");
		Long startTime = System.currentTimeMillis();
		Map<String, Object> modelMap = new HashMap<>();
		List<Area> areaList = new ArrayList<>();
		try {
			areaList = areaService.getAreaList();
			// 得到结果后将areaList和areaList.size封装到modelMap中
			modelMap.put("rows", areaList);
			modelMap.put("total", areaList.size());
		} catch (Exception e) {
			// 错误 将错误日志返回
			e.printStackTrace();
			modelMap.put("success", false);
			modelMap.put("errorMsg", e.toString());
		}
		logger.error("test error!");
		Long endTime = System.currentTimeMillis();
		// {}是占位符
		logger.debug("costTime:[{}]", endTime - startTime);
		logger.info("===end===");
		return modelMap;
	}

}

发布到tomcat并访问:

控制台:
在这里插入图片描述

tomcat CATALINA_HOME:
在这里插入图片描述

gz文件将在第二天出现在相应文件夹中

nice!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值