【Java】log4j2教程

重点

了解log4j2的工作过程和涉及的主要组件
主要配置文件log4j2.xml

工作过程和主要组件

类图

工作过程:log4j2将一次信息的输出定义为一个LogEvent, 这个事件像流水一样具有源头、流经的管道以及终点。

  • 源头对应的就是源代码中的log.info(), log.error()等调用;
  • 管道就是Filter,经过这些Filter时,有的LogEvent会被过滤掉,过滤规则是自定义的,比如可以过滤掉某些包含特殊字符的信息,当然,过滤还由level共同参与决定。
  • 终点就是各个Appender, 典型的Appender比如控制台(System.out), 文件等

level: log4j2的输出api包括: trace,debug,info,warn,error,fatal 分别对应的是事件的级别:TRACE DEBUG INFO WARN ERROR FATAL
过滤规则是:某个级别的logger只接受某个级别及其以后事件的输出, 比如一个logger的级别为INFO, 则调用logger.debug(), logger.trace()均不能产生输出,而logger.info(),logger.warn(),logger.error(),logger.fatal()均可。

类图的解读:
1.此图应当从Configuration开始看
2.Configuration对应一个配置文件,比如log4j2.xml; 这个文件中配置多个LoogerConfig, Appender,Filter,StrSubstitutor
3.LoggerConfig包含对Logger的配置说明,以及多个Filter的引用
4.Filter对信息进行过滤
5.Appender配置信息接收器
6.Layout决定了信息的输出格式, 比如logger.info("A Message""), 其输出通常是:
2017-09-30 10:28:23.175 [main] INFO fulton.util.java_pc.process.StartIntellijIDE - A Message
除了信息本身以外还包括其他的上下文信息,这就是有Layout配置的

配置文件log4j2.xml

模板:

配置参考

配置和类图的说明是对应的,一个Configuration对应多个Appender, 多个Logger。

Logger的名称、继承体系和获取方式

首先必须了解Logger的命名和层次关系。Logger是有继承关系的,就像Java中的类体系一样,Object是所有的类的超类;同理,在Logger中也存在一个RootLogger,它是所有Logger的父类。Logger之间的继承是通过对名称的设置来隐式实现的,比如一个名为 "com.a"的logger就是"com.a.b"的父logger, 而"com.a"的父Logger就是RootLogger。每个Logger都具有名称,它们在配置文件中的Loggers部分,通过Logger标签的name属性配置,比如:

 <Logger name="com.a" level="trace">
     <AppenderRef ref="Console">
  </Logger>

为了使用Logger,必须从LogManager根据name来获取一个Logger。LogManager提供如下方法:

  • getRootLogger()
  • getLogger(name)
    当获取一个name没有配置在配置文件中的Logger时,默认创建一个Logger,并继承RootLogger的所有属性; 而RootLogger是可以在配置文件中进行配置的。
    一个通常的做法是,每个类使用一个logger,名称就是类的完整名称(包括包名)。为此,LogManager还提供了一个简便方法:getLogger(Class)。这样得到的Logger名称就是当前的类名。

Logger的使用方法

假设版本号为2.9.1

  • 引入jar包:log4j-core-2.9.1.jar log4j-api-2.9.1.jar
  • 在src目录下新建log4j2.xml文件,输入配置内容
  • 对于需要输出信息的类,使用下面的模板:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass{
    public static final Logger logger = LogManager.getLogger(MyClass.class);
        public void myMethod()
        {
          logger.info("calling me....");
        }
        ....
}

参考

https://logging.apache.org/log4j/2.0/manual/index.html Apache官方参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容

  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 5,038评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 4,985评论 0 6
  • log4j是一个被广泛使用的Java日志记录框架,通过使用该框架,我们可以在自己的项目中根据自身需求灵活配置日志输...
    LilacZiyun阅读 5,924评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 一:根节点包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为tru...
    把爱放下会走更远阅读 631评论 0 0