spring和springboot关于日志使用

13 篇文章 0 订阅
1 篇文章 0 订阅

spring使用log4j

1. maven配置

<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.6.6</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>

2. web.xml配置

<!--每隔60s扫描log4j的配置文件,这里配置的log4jRefreshInterval参数表示能不用重启web服务器就能动态更改log4j日志级别,这也是和Spring整合的一大好处 -->
	<context-param>
		<param-name>log4jRefreshInterval</param-name>
		<param-value>60000</param-value>
	</context-param>
	<listener>
		<!--从spring4.2.1开始Log4jConfigListener已经被废弃,最好使用log4j2对应的org.apache.logging.log4j.web.Log4jServletContextListener 
			.Log4jServletContextListener -->
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>

3. log4j.properties文件

文件放在resources下面

log4j.rootLogger = INFO, stdout, D, E
#日志输出到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.ConversionLayout = %d [%t] %-5p %c - %m%n
#日志输出到文件
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /Users/zshuai/Desktop/log/log.log
log4j.appender.D.DatePattern = '_'yyyy-MM-dd'.log'
#日志的最大容量为10M
log4j.appender.D.maxFileSize=10240KB
#是否追加写进文件     
log4j.appender.D.Append = true 
#输出DEBUG级别日志到文件中   
log4j.appender.D.Threshold = DEBUG    
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =\n\n[%-5p] %d{yyyy-MM-dd HH\:mm\:ss,SSS} method\:%l%n%m%n

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
###设置DatePattern,当天日志保存到error.log文件,前一天的日志文件名将被修改为
#error.log + _yyyy-MM-dd.log
log4j.appender.E.File =/Users/zshuai/Desktop/log/error.log
log4j.appender.E.DatePattern = '_'yyyy-MM-dd'.log'
log4j.appender.E.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

4.调用

package com.zshuai.service.impl;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.zshuai.dao.UserInfoMapper;
import com.zshuai.pojo.UserInfo;
import com.zshuai.service.UserService;

@Service
public class UserServiceImpl implements UserService {

	private Logger log = Logger.getLogger(UserServiceImpl.class); //第一步
	@Autowired
	private UserInfoMapper userMapper;

	@Override
	public void addUser() {
		try {
			UserInfo pojo = new UserInfo();
			pojo.setUid(1);
			pojo.setName("zshuai");
			pojo.setPassword("aaaaaaa");
			pojo.setSex(1);
			pojo.setAddress("北京市海淀区");
			userMapper.insert(pojo);
			System.out.println("插入完毕");
			int i = 1 / 0;
			UserInfo entity = userMapper.selectByPrimaryKey(1);
			System.out.println(entity.getName() + "查询的名字");
		} catch (Exception e) {
			log.info("除数为0了"); // 第二步
			log.error("发生异常", e);
			log.warn("警告!!");
			throw new RuntimeException("除数为0");
		}

	}

}

SpringBoot使用log4j2

maven项目

1.前言

spring boot支持的日志框架有,Logback,Log4j2,Log4j和Java Util Logging,默认使用的是Logback日志框架,如果要使用别的日志框架,必须让spring boot项目不使用Logback。

2. 修改maven

集成log4j2,添加以下内容,去除Logback的依赖包,添加Log4j2的依赖包

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<!-- 排除自带的Logback日志工具依赖,为了项目使用Log4j2日志打印工具 -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- 导入log4j2依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>
		<!-- end -->

2.配置文件

在资源文件夹src/main/resources下添加log4j2.xml或者log4j2-spring.xml,启动后spring boot自动加载。
具体信息,配置文件中很详细

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE >ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出;可以设置成OFF(关闭)或Error(只输出错误信息) -->
<!--monitorInterval:Log4j2能够自动检测修改配置文件和重新配置本身,设置间隔秒数 -->
<Configuration status="WARN" monitorInterval="30">

	<Properties>
		<!-- 缺省配置(用于开发环境),配置日志文件输出目录和动态参数。其他环境需要在VM参数中指定; “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值 -->
		<!-- 全局属性 -->
		<Property name="APP_NAME">transBoot</Property>
		<Property name="LOG_PATH">${sys:user.home}/logs/${APP_NAME}</Property>
		<Property name="PATTERN_FORMAT">[%date{yyyy-MM-dd HH:mm:ss.SSS}][%thread][%level][%class][%line]:%message%n</Property>
	</Properties>

	<!-- 定义所有的appender -->
	<Appenders>
		<!--这个输出控制台的配置 -->
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="${PATTERN_FORMAT}"/>
		</Console>
		<!-- info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
	    <!--输出到文件 用来定义超过指定大小自动删除旧的创建新的的Appender.-->
		<RollingRandomAccessFile name="infoLog"
			fileName="${LOG_PATH}/info.log"
			filePattern="${LOG_PATH}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"
			append="true">
			<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
			<Filters>
				<!-- onMatch="ACCEPT" 表示匹配该级别及以上 -->
				<!-- onMatch="DENY" 表示不匹配该级别及以上 -->
				<!-- onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上 -->
				<!-- onMismatch="ACCEPT" 表示匹配该级别以下 -->
				<!-- onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的 -->
				<!-- onMismatch="DENY" 表示不匹配该级别以下的 -->
				<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
			</Filters>
			<PatternLayout pattern="${PATTERN_FORMAT}"/>
			<Policies>
				<!-- 基于时间的滚动策略,interval属性用来指定多久滚动一次,默认是1 hour -->
				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
				<!-- 基于指定文件大小的滚动策略,size属性用来定义每个日志文件的大小 -->
				<SizeBasedTriggeringPolicy size="10MB" />
				<!-- DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性) -->
			</Policies>
		</RollingRandomAccessFile>
		<!-- warn级别的日志信息 -->
		<RollingRandomAccessFile name="warnLog" fileName="${LOG_PATH}/warn.log" filePattern="${LOG_PATH}/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz"
			append="true">
			<Filters>
				<!-- onMatch="ACCEPT" 表示匹配该级别及以上 -->
				<!-- onMatch="DENY" 表示不匹配该级别及以上 -->
				<!-- onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上 -->
				<!-- onMismatch="ACCEPT" 表示匹配该级别以下 -->
				<!-- onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的 -->
				<!-- onMismatch="DENY" 表示不匹配该级别以下的 -->
				<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL" />
				<ThresholdFilter level="warn" onMatch="ACCEPT" 	onMismatch="DENY" />
			</Filters>

			<PatternLayout pattern="${PATTERN_FORMAT}"/>
			<Policies>
				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
				<SizeBasedTriggeringPolicy size="10MB" />
			</Policies>
		</RollingRandomAccessFile>


		<!-- error级别的日志信息 -->
		<RollingRandomAccessFile name="errorLog" fileName="${LOG_PATH}/error.log"
			filePattern="${LOG_PATH}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"
			append="true">
			<Filters>
				<!-- onMatch="ACCEPT" 表示匹配该级别及以上 -->
				<!-- onMatch="DENY" 表示不匹配该级别及以上 -->
				<!-- onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上 -->
				<!-- onMismatch="ACCEPT" 表示匹配该级别以下 -->
				<!-- onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的 -->
				<!-- onMismatch="DENY" 表示不匹配该级别以下的 -->
				<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
			</Filters>

			<PatternLayout pattern="${PATTERN_FORMAT}"/>

			<Policies>
				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
				<SizeBasedTriggeringPolicy size="10MB" />
			</Policies>
		</RollingRandomAccessFile>
	</Appenders>


	<!-- 全局配置,默认所有的Logger都继承此配置 -->

	<!-- 用来配置LoggerConfig,包含一个root logger和若干个普通logger。 additivity指定是否同时输出log到父类的appender,缺省为true。 
		一个Logger可以绑定多个不同的Appender。只有定义了logger并引入的appender,appender才会生效。 -->
	<Loggers>
	<!-- root logger 配置 -->
		<Root level="ALL" >
			<AppenderRef ref="Console" />
			<AppenderRef ref="infoLog" />
			<AppenderRef ref="warnLog" />
			<AppenderRef ref="errorLog" />
		</Root>
		<!-- 第三方的软件日志级别 -->
		<logger name="org.springframework" level="info" additivity="true">
			<AppenderRef ref="warnLog" />
			<AppenderRef ref="errorLog" />
		</logger>

		<logger name="java.sql.PreparedStatement" level="debug" additivity="true">
			<AppenderRef ref="Console" />
		</logger>

		<logger name="codex.terry.filter" level="debug" additivity="true">
			<AppenderRef ref="infoLog" />
			<AppenderRef ref="warnLog" />
			<AppenderRef ref="errorLog" />
		</logger>
		<!-- AsyncRoot - 异步记录日志 - 需要LMAXDisruptor的支持 -->
		<!-- <AsyncRootlevel="info" additivity="false"> <AppenderRef ref="Console"/> 
			<AppenderRef ref="infoLog"/> <AppenderRef ref="errorLog"/> </AsyncRoot> -->
	</Loggers>

</Configuration>

3.application文件中配置

server:
  port: 8010
spring:
    datasource:
      username: root
      password: rootzs
      url: jdbc:mysql://localhost:3306/transDemo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
      driver-class-name: com.mysql.jdbc.Driver
mybatis:
  mapper-locations: classpath:mapping/*Mapper.xml
  type-aliases-package:  com.zshuai.pojo
logging:
  config: classpath:log4j2-spring.xml 

这是yml文件,properties配置一样

4.使用

package com.zshuai;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@EnableTransactionManagement // 开启注解事务管理,等同于xml配置文件中的 <tx:annotation-driven />
@SpringBootApplication
@MapperScan("com.zshuai.dao")
public class TransbootApplication {

	public final static Logger logger = LoggerFactory.getLogger(TransbootApplication.class);

	public static void main(String[] args) {
		SpringApplication.run(TransbootApplication.class, args);
		logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");

	}
}

Gradle项目

1. 修改build.gradle

增加红色部分
在这里插入图片描述

configurations {
    compile.exclude group:'ch.qos.logback'
}
// 依赖关系
dependencies {
	// 该依赖对于编译发行是必须的
	compile('org.springframework.boot:spring-boot-starter-web'){
		exclude module: 'spring-boot-starter-logging'
	}
	//添加log4j2依赖
	compile('org.springframework.boot:spring-boot-starter-log4j2:1.5.7.RELEASE')
	
	// 添加 Thymeleaf 的依赖
	compile('org.springframework.boot:spring-boot-starter-thymeleaf')

	
	// 该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依
	testCompile('org.springframework.boot:spring-boot-starter-test')
}

2. 修改application.yml文件

server:
  port: 1994
logging:
  config: classpath:log4j2-spring.xml

3. 配置文件

在资源文件夹src/main/resources下添加log4j2.xml或者log4j2-spring.xml,启动后spring boot自动加载。
具体信息,配置文件中很详细。内容可以跟maven的一样。

4. 使用

package com.zshuai.springbppt.thymeleaf.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
	public final static Logger logger = LoggerFactory.getLogger(HelloController.class);
	@RequestMapping("/hello")
	public String hello() {
		logger.info("hello方法执行!");
		return "Hello to Gradle World!";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值