申明:本文的配置部分很大部分参考自博客园博主“滕秋宇”,我将复制他博文的一部分,在这之前,我先总结一些我认为比较重要的部分。
他的博文链接:https://www.cnblogs.com/tengqiuyu/p/7535373.html; 致谢!

首先搞清楚log4j是个啥?
wikipedia-log4j

Apache Log4j is a Java-based logging utility. It was originally written by Ceki Gülcü and is part of the Apache Logging Services project of the Apache Software Foundation. Log4j is one of several Java logging frameworks

log4j是一个基于Java的写日志的工具,最初由一个不知道哪国人的叫 Ceki Gülcü的写的,并且是Apache软件基金会的日志服务工程之一。log4j是Java的几个日志框架之一。(那么Java还有哪些日志框架呢?我们跟进:wikipedia-Java logging frameworks 有

  1. Log4J: 广泛使用

  2. Java Logging API: java亲生的

  3. Logging: 基于底层log框架的架子,广泛使用,常与Log4J结合;

  4. SLF4J: 基于底层log框架的架子,配合使用的,不能脱离它们;Simple Logging Facade for Java;作者和Log4J是一个人。
    它依赖后端(更底层)的logging框架,当已有的代码或者第三方代码已经选定了底层logging框架,比如Log4J,logback,tinylog时,代码整合就很方便,SLF4J的作用就在这里。

    说到facade(那个字母c不是c):JUnit提供了一个facade,org.junit.runner.JunitCore,它可以运行任何测试运行任何测试运行器,你可以使用facade来将一些复杂的对象交互简化成一个单独的接口。

  5. tinylog: 轻量型的log框架,专为Java和Android设计:https://tinylog.org/

  6. Logback: 将作为Log4J的继承者,完善了Log4J,理由是:Reasons to prefer logback over log4j;(更快,占用内存更小;经过了更大的测试,经历了无数个日日夜夜,更可靠)Logback主要由三模块组成:
    Logback-core:底层核心为后两个服务;logback-classic: 被认为是Log4J的重要提升,同时,它实现了SLF4J的API,方便切换框架,and logback-access,结合了一些Servlet。

Logger
A Logger is an object that allows the application to log without regard to where the output is sent/stored. >The application logs a message by passing an object or an object and an exception with an optional >severity level to the logger object under a given a name/identifier.
Name
A logger has a name. The name is usually structured hierarchically, with periods (.) separating the levels. >A common scheme is to use the name of the class or package that is doing the logging. Both log4j and >the Java logging API support defining Handlers higher up the hierarchy.

For example, the logger might be named “com.sun.some.UsefulClass”. The handler can be defined for any of the following:
com
com.sun
com.sun.some
com.sun.some.UsefulClass

logger是一个对象,允许程序输出log,不管它输出到哪里(为appender埋伏笔)…
应用通过一个对象或者一个对象和一个异常,再加上通过名字或者标识符标志的可选的严重等级来记录信息。
所以这个名字是什么意思?
日志记录器有个名字,名字通常是结构化继承的,用点点来分等级。一个通用的办法是用类名或者包名来打logging!(白人感叹号脸-_-).log4j和那Java的logging 应用程序接口支持定义处理者在更高的等级。
比如一个日志记录器叫com.sun.some.UsefulClass,那处理者可以被定义为下面任何一个,曾祖父(母),爷爷(奶奶),爸爸或者自己。

看看日志严重等级分哪些(Log4J 2):

  1. OFF:最高的可能的等级,日志马上即将都记不了了;

  2. FATAL:严重的错误导致过早终止,希望这些错误在状态控制台可以马上看到!

  3. ERROR:其他的运行时错误或者意料之外的情况,希望这些错误在状态控制台可以马上看到!

  4. WARN:用旧的API,API用得很糟糕,几乎出错(就像合金弹头里小人在崖边流鼻涕那种),其他运行
    时不期望的情况,但不至于是“错误的”,状态控制台也很想见”WARN“。

  5. INFO:你感兴趣的运行时事件(启动和关闭)啦,状态控制台也想看它,但它比较腼腆,不常露面。

  6. DEBUG:数据在系统中流动的细节由它掌管。只有这些才会被希望写到日志里(实际应用中状态控制台谁去盯着看,都要保存的)。话句话说,你的程序打的大多数log应该写成DEBUG.

  7. TRACE:最细节的信息(明察秋毫),希望写到log文件里,自从1.2.12版本。(log4j的1.2.12版本)。

嗯,Log4J 2代支持 自定义等级!
自定义等级使用的方法是Level.forName(name,value);其中,value就是等级;
看看自带的等级的value是多少?StandardLevel.class
package org.apache.logging.log4j 中 Level.class
OFF(0),
FATAL(100),
ERROR(200),
WARN(300),
INFO(400),
DEBUG(500),
TRACE(600),
ALL(2147483647).

log4J可以用配置文件或者通过java代码,其中配置文件可以用XML,JSON,YAML,或者properties格式。
在配置中,你可以定义,注意,重点,定义三个组件:Logger,Appender,Layout,即日志记录器,输出目的地,输出的格式(布局)。
说点重点吧:log4j 2 添加了Appender啦,有这么几位:Apache Flume(什么东东?),Java Persistence API(Java持久化API,什么东东?),Apache Kafka(正中下怀),NoSQL数据库,内存映射文件(Memory-mapped files),随机流(java.io.RandomAccessFile什么东东?没见过)还有个ZeroMQ endpoint(没见过)。

en~,Fileter也很重要的!
Log4J2_IN_WIKIPEDIA
In Log4j 2, Filters can be defined on configuration elements to give more fine-grained control over which log entries should be processed by which Loggers and Appenders. In addition to filtering by log level and regular expression matching on the message string, Log4j 2 added burst filters, time filters, filtering by other log event attributes like Markers or Thread Context Map and JSR 223 script filters.

跑偏了:
好了;
***Log4J配置怎么写?***
https://logging.apache.org/log4j/2.x/manual/configuration.html#Appenders

实际用了下下,感觉Log4J 2比 1代确实好,可以自定义等级,在我看来分工也更明确,使用xml表达方便理解各自组件的关系
有个问题,如何指定某个类的日志输出等级(比如你使用Tomcat时,打出一大堆INFO日志都是你不需要的,想看自己代码的DEBUG把别的也带出来一大堆,很不爽):
Log4J 1.x中是这样写的:log4j.logger.org.springframework=ERROR不过这个好像是全局控制的
Log4J 2.x中这样写的:<Logger name="com.another.project" level="ERROR" /> logger是logger,appender是appender,感觉比Log4J 1.x 从形式上好看些,完整的见下:https://stackoverflow.com/questions/16917008/filter-by-class-name-in-log4j2
具体在properties文件下写法,应该差不多

<Configuration status="warn"><Appenders><File name="MyFile" fileName="logs/my.log"><PatternLayout pattern="%d %p %c{1.} [%t] %m%n" /></File></Appenders><Loggers><!-- drops all DEBUG and TRACE logging done by any class in this package --><Logger name="com.other.company" level="INFO" /><!-- log only ERROR and FATAL logging by classes in this package --><Logger name="com.another.project" level="ERROR" /><!-- by default, all log events are written to MyFile --><Root level="trace"><AppenderRef ref="MyFile"/></Root></Loggers>
</Configuration>

配置%M, %d的含义是什么呢?
https://logging.apache.org/log4j/2.x/manual/layouts.html 搜索“Pattern Layout”
%d 就是date
%p 就是level
%m 就是message,应用对日志事件所提供的信息???
%n 就是换行符
一个比较深刻的博客:
https://www.cnblogs.com/Mainz/p/3628414.html
配置详解:
https://www.cnblogs.com/ITtangtang/p/3926665.html

Log4J + SLF4j + Log4J 2相关推荐

  1. [转]slf4j + log4j原理实现及源码分析

    slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html

  2. slf4j+log4j打印日志,控制台无日志输出

    slf4j+log4j 实现日志打印 项目场景: 今天看以前的项目,运行起来报错,项目日志对于项目是很重要的,但是控制台没有打印出来日志,运行起来报错的问题先放一放,先把日志的问题解决了,我项目中有l ...

  3. SLF4J log4j 学习笔记一

    SLF4J log4j 一.介绍: 简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的 接口,从而使得最终用户能够在 ...

  4. SLF4j+LOG4j

    工作笔记:在myeclipse 中创建一个java project 创建一个 TestSlf4J 类 import org.slf4j.Logger; import org.slf4j.LoggerF ...

  5. Java日志框架Slf4j+Log4j入门

    一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...

  6. java sl4j 日志_Java日志框架Slf4j+Log4j入门

    一.日志系统介绍 slf4j,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统.简答的讲就是slf4j是一系列的日志 ...

  7. SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享

    文章目录 1.概述 1.1 说明 1.2 日志体系 1.2.1 JCL日志面门介绍 1.2.2 Slf4j日志面门介绍 2.几种日志系统介绍: 2.1 Slf4j 2.2 Commons-loggin ...

  8. log4j/slf4j

    log4j的使用 引入log4j.jar包 <dependency><groupId>log4j</groupId><artifactId>log4j& ...

  9. spring集成 log4j + slf4j

    以maven web项目为例, 首先.在pom文件引入相关依赖,如下(spring官网文档有介绍): <dependencies><!-- spring 相关 --><d ...

最新文章

  1. 22条API设计的最佳实践
  2. 我的很长(源码),你忍一下!
  3. 7.4 程序示例--PCA for 加速学习-机器学习笔记-斯坦福吴恩达教授
  4. php post 渲染数据,php 程序内部post数据实现方法
  5. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (3)
  6. Babelfish (STL)
  7. Java虚拟机内存分配策略
  8. Oracle中一般游标与REF游标的区别
  9. 共享共建会让中国的5G加速吗?
  10. 实用的powershell小技巧,持续更新……
  11. python精彩编程200例-Python趣味编程与精彩实例
  12. php在线中文转英文,thinkphp页面的多语言切换,中文、英文之间的转换
  13. python输入一个三位数输出百位十位个位_“任意输入一个三位数,输出这个三位数的百位、十位和个位,并且计算十位百位个位的和。”c语言程序...
  14. Dorado7之AjaxAction
  15. CS5211:EDP转LVDS转换器,可替代PS8622,PS8625,CH7511等芯片!
  16. 关于win10无线网卡不可用,网络适配器出现黄色感叹号问题的修复方式
  17. Unity换装系统实现
  18. [4G5G专题-38]:物理层- LTE/NR下行公共控制信道PDCCH与其承载的内容下行控制信息格式DCI
  19. Win10+VS2019+opencv-4.1.0 学习一:显示一张图片
  20. 图像修复序列——BSCB模型

热门文章

  1. python毕业设计项目源码选题(17)校园二手书籍交易系统毕业设计毕设作品开题报告开题答辩PPT
  2. 康威定律【系统设计的影响因素】
  3. python对律师的作用_法律行业python教程——利用python批量制作律师函
  4. 关于行人检测中的常用数据集
  5. [Java JVM] Hotspot GC研究- 64位引用指针压缩技术
  6. 关于SEO的一些浅认识
  7. 成都聚思力java面试题,去年秋招面试过的各个大厂总结的一波Java并发常见高频面经...
  8. 管理经济学知识点汇总
  9. tvOS游戏开发系列(SpriteKit)之新建tvOS游戏项目(二)
  10. Python——LeetCode刷题——【977. 有序数组的平方】