SpringBoot使用Log4j的知识点整理

log4j、logback、Log4j2简介

  • log4j是apache实现的一个开源日志组件
  • logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现
  • Log4j2是log4j 1.x和logback的改进版,采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活

slf4j+log4j和直接用log4j的区别

slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback),使用接口的好处是当项目需要更换日志框架的时候,只需要更换jar和配置,不需要更改相关java代码。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestSlf4j {
 //Logger和LoggerFactory导入的是org.slf4j包
 private final static Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
}

log4j、logback、log4j2都是一种日志具体实现框架,所以既可以单独使用也可以结合slf4j一起搭配使用

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TestLog4j {
 // Logger和LogManager导入的是org.apache.logging包
 private static final Logger LOG = LogManager.getLogger(TestLog4j.class);
}

导入需要使用的jar包(slf4j+log4j2)

log4j2

如项目中有导入spring-boot-starter-web依赖包记得去掉spring自带的日志依赖spring-boot-starter-logging

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <exclusions>
  <exclusion>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
  </exclusion>
 </exclusions>
</dependency>

springboot项目中需导入log4j2

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j

如果要使用log4j,则把log4j2的坐标替换为下面的这个,依然要排除原有的spring-boot-starter-logging。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j</artifactId>
 <version>1.3.8.RELEASE</version>
</dependency>

如果使用log4j,直接在resource下方新建log4j.properties即可。

https://www.jb51.net/article/143488.htm

配置XML位置Log4j2

Springboot方式

application.properties 中添加配置 logging.config=classpath:log4j2_dev.xml,log4j2_dev.xml是你创建的log4j2的配置文件名,放在resources下,如放在其他路径则对应修改

Web工程方式

<context-param>
 <param-name>log4jConfiguration</param-name>
 <param-value>/WEB-INF/conf/log4j2.xml</param-value>
</context-param> 

<listener>
 <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>

Java方式

public static void main(String[] args) throws IOException {
 File file = new File("D:/log4j2.xml");
 BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
 final ConfigurationSource source = new ConfigurationSource(in);
 Configurator.initialize(null, source); 

 Logger logger = LogManager.getLogger("myLogger");
}

配置文件的格式:log2j配置文件可以是xml格式的,也可以是json格式的

配置文件的位置:log4j2默认会在classpath目录下寻找log4j2.xml、log4j.json、log4j.jsn等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台,也可以对配置文件自定义位置(需要在web.xml中配置),一般放置在src/main/resources根目录下即可。

以上就是小编给大家整理的全部相关知识点,感谢大家的学习。

(0)

相关推荐

  • SpringBoot2 集成log4j2日志框架的实现

    前言 Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题.而且日志处理中我们会用到kafka作为日志管道.而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 . <!-- more --> 排除Logback依赖 Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. <dependency> &

  • SpringBoot集成slf4j+log4j2的示例代码

    本文介绍了SpringBoot集成slf4j+log4j2的示例代码,分享给大家,具体如下: Maven依赖 <!--增加log4j2依赖↓--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency&g

  • springboot 高版本后继续使用log4j的完美解决方法

    springboot  高版本后不支持log4j了,很多人还是喜欢log4j风格的日志,我们自己来加载log4j,其实很容易. 第一步:我们手动加入我们想要的log4j jar,在项目里面随便建一个文件夹,将用到的jar丢进去,右键 add to build path 第二步: 在main函数启动类所在的包或者其子包下写一个这样的类,用来加载log4j配置文件,是的,什么内容都没有. import org.springframework.boot.context.properties.Confi

  • Springboot整合log4j2日志全解总结

    在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式. 在18年大环境下,更多的企业使用Springboot和Springcloud来搭建他们的企业微服务项目 ,此篇文章是博主在实践中用Springboot整合log4j2日志的总结. 常用日志框架 java.util.logging:是JDK在1.4版本中引入的Java原生日志框架 Lo

  • SpringBoot使用Log4j的知识点整理

    log4j.logback.Log4j2简介 log4j是apache实现的一个开源日志组件 logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现 Log4j2是log4j 1.x和logback的改进版,采用了一些新技术(无锁异步.等等),使得日志的吞吐量.性能比log4j 1.x提高10倍,并解决了一些死锁的bug,而且配置更加简单灵活 slf4j+log4j和直接用log4j的区别 slf4j是对所有日志框架制定的一种规

  • Java Springboot 重要知识点整理汇总

    1.springboot controller 单例 Spring中 controller默认是单例的,因为单例所以不是线程安全的. 所以需要注意下面几点 不要在Controller中定义成员变量,可能会造成数据混乱. 万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式. 在Controller中使用ThreadLocal变量解决多线程问题 spring bean作用域: singleton:单例模式,当spring创建appli

  • Webpack框架核心概念(知识点整理)

    webpack是什么 webpack是一个前端构建的打包工具(并不是什么库或框架), 它能把各种资源,例如JS(含JSX).coffee.css(含less/sass).图片等都作为模块来处理和使用. 1.基础知识点 1.1 webpack 是一个现代 JavaScript 应用程序的模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个

  • Vue面试题及Vue知识点整理

    看面试题,只是为了查漏补缺,看看自己那些方面还不懂.切记不要以为背了面试题,就万事大吉了,最好是理解背后的原理,这样面试的时候才能侃侃而谈.不然,稍微有水平的面试官一看就能看出,是否有真才实学还是刚好背中了这道面试题.(都是一些基础的vue面试题,大神不用浪费时间往下看) 一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数据模型转化成UI 展现出来

  • ES6知识点整理之Proxy的应用实例详解

    本文实例讲述了ES6知识点整理之Proxy的应用.分享给大家供大家参考,具体如下: Proxy 用于修改对象某些操作的默认行为,可以对外界的访问进行过滤和改写,其概念类似于元编程. Proxy 让我们可以对任何对象的绝大部分行为进行监听和干涉,实现更多的自定义程序行为.在目标对象之前架设一层"拦截",外界对该对象的访问,都必须先通过这层拦截. 目前[兼容性]存在一定的问题,目前在chrome和ff浏览器中的非严格模式下可用,一些先进的技术即使在目前不能广泛应用,但随着时间的流逝,都将会

  • vue项目前端知识点整理【收藏】

    微信授权后还能通过浏览器返回键回到授权页 在导航守卫中可以在 next({}) 中设置 replace: true 来重定向到改路由,跟 router.replace() 相同 router.beforeEach((to, from, next) => { if (getToken()) { ... } else { // 储存进来的地址,供授权后跳回 setUrl(to.fullPath) next({ path: '/author', replace: true }) } }) 路由切换时页

  • ES6知识点整理之String字符串新增常用方法示例

    本文实例讲述了ES6知识点整理之String字符串新增常用方法.分享给大家供大家参考,具体如下: 字符串includes,startsWith,endsWith方法测试 普通的用法: <script> var str = 'Hello'; console.log(str.indexOf('o')); // 4 console.log(str.includes('e')); // true console.log(str.startsWith('H')); // true console.log

  • ES6知识点整理之函数数组参数的默认值及其解构应用示例

    本文实例讲述了ES6知识点整理之函数数组参数的默认值及其解构应用.分享给大家供大家参考,具体如下: 在ES6中, 函数的参数也可以使用解构赋值和默认值的设置,下面我们来看下 在ES6之前设置函数默认值的写法 function test(x,y) { x = x || 12; y = y || 22; console.log(x,y); } test(); // 12 22 test(1,2) // 1 2 在ES6中给函数参数赋默认值 function test(x=12, y=22) { co

  • ES6知识点整理之对象解构赋值应用示例

    本文实例讲述了ES6知识点整理之对象解构赋值应用.分享给大家供大家参考,具体如下: ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring), 在对象的解构赋值中有一些需要注意的事项 初识对象的解构 var {name} = { name:'Joh', age:10 }; console.log(name); // Joh 通过解构的形式取出对象中的属性值 对解构出的属性进行重命名 var {name} = { name:'Joh', age:1

  • ES6知识点整理之数组解构和字符串解构的应用示例

    本文实例讲述了ES6知识点整理之数组解构和字符串解构的应用.分享给大家供大家参考,具体如下: ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring), 而数组的解构赋值是从数组中提取值,按照对应位置,对变量赋值. ES6之前的赋值操作 var arr = [1,2,3]; var a = arr[0]; var b = arr[1]; var c = arr[2]; console.log(a,b,c); // 1 2 3 对一维数组的解构赋值

随机推荐