log4j配置

log4j----slf4j---logback从知道到编写配置文件

≡放荡痞女 提交于 2019-12-05 07:13:27
明天要去学习的 1.学习springBoot的自动装配,并且知道spring是如何自动去加载log4j的流程 https://blog.csdn.net/satomiyo/article/details/100040235 log4j配置文件 了解日志-->slf4j的介绍-->log4j的介绍-->logback的介绍-->springboot中slf4j+log4j的使用-->springboot中slf4j+logback的使用 一、前言 我觉得能够加强自己的开发能力,首先必须学会去配置一些文件,而不是crud。在springBoot项目中,一般会有log4j.properties的配置文件,该配置文件是记录项目中的日志的配置信息。 日志是一个项目中必不可少的灵魂,没有日志的项目是没有灵魂的,因此掌握基础的日志编写是非常有必要的。 二、为什么需要日志 我们最开始使用的是System.out.prinlt()进行输出我们的调代码的信息,用来监控具有什么信息,System.out.println()其实是对业务无关的代码,这些对业务无关的代码都是对业务代码的一些intercupt。 我们必须要明确,日志不仅仅System.out.prinlt(s) ,s的信息,同时日志包括一些额外的上下文,上下文信息是非常重要的,这些信息具有 访问时间、对应的类、行、产生的线程等

springboot项目大量打印debug日志问题

谁都会走 提交于 2019-12-05 06:59:01
目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback 。 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系统。Log4j则同时包含了日志接口和实现。 这两套日志系统之间有可以相互兼容的组件,分别是slf4j-log4j12和 log4j-over-slf4j,引入之后就可以用log4j打出slf4j接口的日志,或者用logback打出log4j接口的日志。 背景知识介绍到这里,再简单说一下标题里提到的问题。问题的现象就是我们在war包里配置了log4j的日志级别为info, 但在catalina里却一直在打大量的debug日志。初看现象肯定很诡异,前期各种研究tomcat配置也没什么头绪。直到磁盘压力太大,去看jstack发现大量进程是等待在Logback代码中,才发现之前关注错了重点。再去具体了解了java下的日志系统后,问题也就很明了了。 先把几个事实摆出来: 1. 打出的debug日志都是用slf4j写的,根据堆栈得知logback具体执行了日志打印 2. logback在无配置文件时默认debug级别 3. 我们的war包中同时包含logback,log4j和slf4j-log4j12 4. Slf4j无法主动选择具体的日志实现 想必看到这里,大家也明白了问题所在。根据我们引入的包

log4j配置信息

眉间皱痕 提交于 2019-12-05 01:48:34
基本配置文件log4j.properties 1 log4j.rootLogger=debug, stdout, R 2 3 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 6 # Pattern to output the caller's file name and line number. 7 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 8 9 log4j.appender.R=org.apache.log4j.RollingFileAppender 10 log4j.appender.R.File=example.log 11 12 log4j.appender.R.MaxFileSize=100KB 13 # Keep one backup file 14 log4j.appender.R.MaxBackupIndex=5 15 16 log4j.appender.R.layout=org.apache.log4j.PatternLayout 17 log4j.appender.R

Java日志框架SLF4J和log4j以及logback的联系和区别

萝らか妹 提交于 2019-12-05 01:48:00
https://www.cnblogs.com/hanszhao/p/9754419.html 1.SLF4J(Simple logging Facade for Java) 意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终日志的格式、记录级别、输出方式等都要通过接口绑定的具体的日志系统来实现,这些具体的日志系统就有log4j,logback,java.util.logging等,它们才实现了具体的日志系统的功能。 如何使用SLF4J? 既然SLF4J只是一个接口,那么实际使用时必须要结合具体的日志系统来使用,我们首先来看SLF4J和各个具体的日志系统进行绑定时的框架原理图: 其实slf4j原理很简单,他只提供一个核心slf4j api(就是slf4j-api.jar包),这个包只有日志的接口,并没有实现,所以如果要使用就得再给它提供一个实现了些接口的日志包,比 如:log4j,common logging,jdk log日志实现包等,但是这些日志实现又不能通过接口直接调用,实现上他们根本就和slf4j-api不一致,因此slf4j又增加了一层来转换各日志实现包的使 用,当然slf4j-simple除外。其结构如下:

log4j 和 log4j2 在springboot中的性能对比

心不动则不痛 提交于 2019-12-04 18:51:33
文章链接: https://pengcheng.site/2019/11/17/log4j-he-log4j2-zai-springboot-zhong-de-xing-neng-dui-bi/ 前言 在 java 项目中最常用的三大日志框架是 logback , log4j , log4j2 。其中 logback 是 springboot 的默认框架。由于历史原因,我手上有个springboot项目的日志框架是用的 log4j 。在对某个接口进行压测和性能优化的时候发现,打印同步日志会导致接口的性能缩水,所以当时直接把性能要求高的接口的日志关闭掉了。随着系统的逐渐复杂,重要性越来越高,定位问题的难度越来越大,我逐渐感觉到日志的的重要性。所以优化日志势在必行。 我是从两个方面来考虑 优化日志 这个问题的。 更换性能更高的日志框架; 使用异步日志或者延时刷盘的日志配置。 对第一个问题,很容易就可以Google到,目前性能表现最好的日志框架是 log4j2 ,所以直接把日志框架替换成 log4j2 就可以了。 对于第二个问题,因为当前日志是同步的,需要把“打印日志”这个操作完成之后才会运行接下来的业务代码,而“打印日志”通常是要输出到控制台或者文件中的,IO开销很大,如果把这个过程变成异步的应该能从一定程度上提高性能表现。 不知道在哪听到的两句话,想在这里分享一下:

log4j2 配置文件解读

瘦欲@ 提交于 2019-12-04 13:50:27
1、日志相关介绍   日志接口(slf4j):slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback)。常用的日志实现方式有log4j、logback、log4j2,log4j是apache实现的一个开源日志组件;logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现;log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高很多,并解决了一些死锁的bug,而且配置更加简单灵活。以下以log4j2 xml配置文件为例。 2、log4j2.xml文件内容如下 <?xml version="1.0" encoding="utf-8"?> <!-- log4j2内部日志配置,status表示日志级别,monitorInterval表示监控间隔 --> <Configuration status="WARN" monitorInterval="10"> <!-- 属性配置,后续可以使用${xxx}获取对应的值 --> <properties> <!-- 日志存放根目录 --> <property name="LOG_HOME"

log4j配置项

我的未来我决定 提交于 2019-12-04 11:32:26
log4j 配置文件 log4j.rootLogger=INFO,console,dailyFile # 控制台配置项 log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Threshold=INFO log4j.appender.console.ImmediateFlush=true log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> %l: %m %x %n # 输出到文件配置项 log4j.appender.dailyFile=org.apache.log4j.FileAppender log4j.appender.dailyFile.File=C:/logs/log log4j.appender.dailyFile.Append=true log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout log4j.appender

架构师必备,带你弄清混乱的JAVA日志体系!

旧巷老猫 提交于 2019-12-04 10:49:35
作者:孤独烟 出处: http://rjzheng.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的 【推荐】 。 引言 还在为弄不清 commons-logging-xx.jar 、 log4j-xx.jar 、 sl4j-api-xx.jar 等日志框架之间复杂的关系而感到烦恼吗? 还在为如何统一系统的日志输出而感到不知所措嘛? 您是否依然存在这样的烦恼。比如,要更改spring的日志输出为log4j 2,却不知该引哪些jar包,只知道去百度一下所谓的博客,照着人家复制,却无法弄懂其中的原理? 不要急,不要方!本文带你们弄懂其中的原理,只要你静下心看本文,你就能随心所欲更改你系统里的日志框架,统一日志输出! 正文 日志框架发展史 早年,你工作的时候,在日志里使用了log4j框架来输出,于是你代码是这么写的 import org.apache.log4j.Logger; \\省略 Logger logger = Logger.getLogger(Test.class); logger.trace("trace"); \\省略 但是,岁月流逝,sun公司对于log4j的出现内心隐隐表示嫉妒。于是在jdk1.4版本后

JAVA 日志系统简介--转

你离开我真会死。 提交于 2019-12-04 00:46:45
日 志,源于log,有航海日志的意思。指记录海员记录每天的行程,生活及发生的事件。在软件开发领域,用来监控代码中变量变化,跟踪 代码运行的轨迹,在开发环境中担当调试器作用,向控制台或文件输出信息。 几乎所有的软件开发语言(平台)都有自己的日志系统, java ,.net,ruby,php等。在 java 领 域,存在大量的日志组件, open-open 收 录了21个日志组件。 从 功能上讲,这些可以分为三类,一是日志工具类,它实现了日志的记录,格式化和级别的划分,代表为 logback,simplelog。二是日志系统,提供了完整的框架功能并实现了日志记录。代表为jul(jdk提供的日志框 架),log4j(apache开源项目)。三是抽象整合类,它提供了一组接口,完成日志功能,通过包装其他日志工具或系统来工作jcl(apache开 源组件),slf4j。 从历史上讲,log4j出现最早, Ceki Gülcü 是其创造者。自java1.4开始,jdk提供了 java .util.logging 类库,提供了一个完整的日志框架,在设计上要比log4j要更清晰。 这个时候,除此之外,还有一些其他日志组件, java 领域从来不缺少轮子,总是有人在发明轮 子,轮子多了,就会产生混乱,就会有人站出来,要一统江湖,于是,jcl,apache一个开源的日志组件诞生了

Java日志Log4j或者Logback的NDC和MDC功能

谁说胖子不能爱 提交于 2019-12-03 04:15:38
NDC和MDC的区别 Java中使用的日志的实现框架有很多种,常用的log4j和logback以及java.util.logging,而log4j是apache实现的一个开源日志组件(Wrapped implementations),logback是slf4j的原生实现(Native implementations)。需要说明的slf4j是Java简单日志的门面(The Simple Logging Facade for Java),如果使用slf4j日志门面,必须要用到slf4j-api,而logback是直接实现的,所以不需要其他额外的转换以及转换带来的消耗,而slf4j要调用log4j的实现,就需要一个适配层,将log4j的实现适配到slf4j-api可调用的模式。 说完基本的日志框架的区别之后,我们再看看NDC和MDC。 不管是log4j还是logback,打印的日志要能体现出问题的所在,能够快速的定位到问题的症结,就必须携带上下文信息(context information),那么其存储该信息的两个重要的类就是NDC(Nested Diagnostic Context)和MDC(Mapped Diagnositc Context)。 NDC采用栈的机制存储上下文,线程独立的,子线程会从父线程拷贝上下文。其调用方法如下: 1.开始调用 NDC.push(message);