前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >细说log4j之log4j 2.x

细说log4j之log4j 2.x

作者头像
编程随笔
发布于 2019-09-11 07:34:57
发布于 2019-09-11 07:34:57
83900
代码可运行
举报
文章被收录于专栏:后端开发随笔后端开发随笔
运行总次数:0
代码可运行

官网:https://logging.apache.org/log4j/2.x/

1. 主要组件:

从图中可以看出,log4j2中的主要组件为:FilterAppenderLogger,他们的层次关系为: Configuration -- Filter -- Appender - Layout -- Filter -- Logger -- Filter 2. log4j 2.x配置 log4j 2.x的配置文件格式和1.x的配置文件格式完全不同,需要特别注意。 log4j 2.x从2.4版本开始支持properties配置文件,名称必须为:log4j2.properties。但是,对于log4j 2.x的配置,建议使用xml格式:log4j2.xml,各个组件配置非常灵活。 log4j 2.x 配置框架: 简洁模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <!-- 定义属性 -->
  <Properties>
    <Property name="name1">value</property>
    <Property name="name2" value="value2"/>
  </Properties>

  <!-- 定义全局过滤器 -->
  <filter ... />

  <!-- 定义日志输出源 -->
  <Appenders>
    <appender ... >
      <filter  ... />
    </appender>
    ...
  </Appenders>
 
  <!-- 定义日志 -->
  <Loggers>
    <Logger name="name1">
      <filter  ... />
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

严格模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>;
<Configuration>
  <Properties>
    <Property name="name1">value</property>
    <Property name="name2" value="value2"/>
  </Properties>

  <Filter type="type" ... />
 
  <Appenders>
    <Appender type="type" name="name">
      <Filter type="type" ... />
    </Appender>
    ...
  </Appenders>

  <Loggers>
    <Logger name="name1">
      <Filter type="type" ... />
    </Logger>
    ...
    <Root level="level">
      <AppenderRef ref="name"/>
    </Root>
  </Loggers>
</Configuration>

3. 详细配置示例 分别以2种配置模式进行配置,如下:

简洁模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
    <!-- 简单模式配置log4j -->
    <!-- 输出源定义 -->
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    
    <!-- 日志 -->
    <Loggers>
        <!-- 特别指定包下的日志级别 -->
        <Logger name="org.chench.ttt" level="trace" additivity="false">
            <AppenderRef ref="Console" />
        </Logger>
    
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

严格模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!-- 使用严格模式配置log4j2 -->
<Configuration status="warn" strict="true" name="XMLConfigTest" packages="org.chench.test">
    <!-- 定义属性  -->
    <Properties>
        <Property name="fileName">target/test.log</Property>
    </Properties>
    
    <!-- 定义过滤器 -->
    <Filter type="ThresholdFilter" level="trace"/>
    
    <!-- 定义日志输出地 -->
    <Appenders>
        <!-- 输出到控制台 -->
        <Appender type="Console" name="STDOUT">
            <!-- <Layout type="PatternLayout" pattern="%m MDC%X%n"/> -->
            <Layout type="PatternLayout" pattern="%d [%t] %-5level %logger{36} - %msg%n"/>
            <!--
            <Filters>
                <Filter type="MarkerFilter" marker="FLOW" onMatch="DENY" onMismatch="NEUTRAL" />
                <Filter type="MarkerFilter" marker="EXCEPTION" onMatch="DENY" onMismatch="ACCEPT"/>
            </Filters>
            -->
        </Appender>
        
        <!-- 输出到控制台 -->
        <Appender type="Console" name="Flow">
            <Layout type="PatternLayout" pattern="%C{1}.%M %m %ex%n"/>
            <!--
            <Filters>
                <Filter type="MarkerFilter" marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
                   <Filter type="MarkerFilter" marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            -->
        </Appender>
        
        <!-- 输出到文件 -->
        <Appender type="File" name="File" fileName="${fileName}">
            <Layout type="PatternLayout">
                <!-- <Pattern>%d %p %C{1.} [%t] %m%n</Pattern> -->
                <!-- <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern> -->
                <Pattern>%d [%t] %-5level %logger{36} - %msg%n</Pattern>
            </Layout>
        </Appender>
        
        <!-- 输出到List -->
        <!-- <Appender type="List" name="List">
        </Appender> -->
    </Appenders>
    
    <!-- 具体日志组件 -->
    <Loggers>
        <!-- 定义org.chench.test.log4j包下的日志组件 -->
        <!-- 
        <Logger name="org.chench.test.log4j" level="debug" additivity="false">
            <Filter type="ThreadContextMapFilter">
                <KeyValuePair key="test" value="123"/>
            </Filter>
            <AppenderRef ref="STDOUT" />
        </Logger>
        -->
        
        <!-- 定义包org.chench.ttt下的日志组件 -->
        <!--
        <Logger name="org.chench.ttt" level="debug" additivity="false">
            <AppenderRef ref="File"/>
        </Logger>
        -->
        
        <Root level="trace">
            <AppenderRef ref="STDOUT" />
            <AppenderRef ref="File" />
        </Root>
    </Loggers>
</Configuration>

4. 在Java中使用log4j2 log4j2中获取日志组件的方式与log4j1不同,以传递class对象为例说明:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log4j1: org.apache.log4j.Logger.getLogger(clazz)
log4j2: org.apache.logging.log4j.LogManager.getLogger(clazz)

代码片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class LoggerTest {
    private static final Logger logger = LogManager.getLogger(LoggerTest.class);
    public static void main(String[] args) {
        logger.info(String.format("log4j2 logger test"));
    }
}

log4j2日志输出格式详见:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Log4j1升级Log4j2实战
新的Log4j 2.0版本有了大幅的性能提升、新的插件系统,以及配置设置方面的很多改善。Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j 1.x和logback ——官方测试结果。
高广超
2018/12/12
3.1K0
Log4j 2配置指南
以前都是直接在项目中使用网上的log4j2.xml,大概能用就行,结果用Storm的时候,项目中的log4j2.xml文件失效,必须在Storm目录的配置文件中配置,就学习了一波,分享一下
Java识堂
2019/08/13
1.7K0
Log4j2-Log4j 2介绍及使用
Log4j的1.x版本已经被广泛使用于很多应用程序中。然而,它这些年的发展已经放缓。它变得越来越难以维护,因为它需要严格遵循很老的Java版本,并在2015年8月寿终正寝。它的替代品,SLF4J和Logback对框架做了很多必要的改进。
小小工匠
2021/08/16
7990
spring引入log4j2日志框架
Log4j2是Apache的一个开源项目,通过使用Log4j2,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
逍遥壮士
2020/09/18
1.7K0
spring引入log4j2日志框架
细说 Java 主流日志工具库
在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。在 Java 世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。
用户1516716
2019/08/13
1.2K0
细说 Java 主流日志工具库
你知道 log4j2 各项配置的全部含义吗?带你了解 log4j2 的全部组件
此前的文章中通过 log4j2 AsyncAppender 的源码介绍了异步日志的用法:
用户3147702
2022/06/27
2.5K0
你知道 log4j2 各项配置的全部含义吗?带你了解 log4j2 的全部组件
带你深入Java Log框架,彻底搞懂Log4J、Log4J2、LogBack,SLF4J
使用过Log4J和LogBack的同学肯定能发现,这两个框架的设计理念极为相似,使用方法也如出一辙。其实这个两个框架的作者都是一个人,Ceki Gülcü,俄罗斯程序员。
码老思
2023/10/19
3.7K0
带你深入Java Log框架,彻底搞懂Log4J、Log4J2、LogBack,SLF4J
SSM项目配置Log4j2
在Spring5.x版本之后,原来的Log4j有很多东西废弃了,所以改用log4j2
别团等shy哥发育
2023/02/25
6250
SSM项目配置Log4j2
log4j2.xml放在哪里_log4j2配置文件详解
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说log4j2.xml放在哪里_log4j2配置文件详解,希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
3.2K0
聊一聊log4j2配置文件log4j2.xml
  最近由于项目的需要,我们把log4j 1.x的版本全部迁移成log4j 2.x 的版本,那随之而来的slf4j整合log4j的配置(使用Slf4j集成Log4j2构建项目日志系统的完美解决方案)以及log4j2配置文件的详解,就需要我们来好好聊一聊了。本文就专门来讲解下log4j2.xml配置文件的各项标签的意义。
阿豪聊干货
2018/08/09
6.2K0
快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架使用方便,学习简单,能够在小型应用中灵活使用。
ha_lydms
2023/08/09
1.3K0
快速了解常用日志技术(JCL、Slf4j、JUL、Log4j、Logback、Log4j2)
Springboot 整合 log4j2 日志详解
在项目推进中,如果说第一件事是搭 Spring 框架的话,那么第二件事情就是在 Sring 基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上 Web 项目,因为日志可能是我们了解应用如何执行的唯一方式。
JavaFish
2020/01/02
1.2K0
第十一节:Springboot整合log4j2日志
SpringBoot默认使用的是logback, 但是还有一个性能更高的日志实现框架log4j2. 为什么选用log4j2 相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生; 下面是来自网络上一张性能对比图片 [img] 同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的 log4j2性能高的主要原因是它用了一个LMAX无
入门笔记
2022/02/14
2970
第十一节:Springboot整合log4j2日志
Log4j2使用案例
用一个root logger做入口,进入多个appender,在appender中分等级记录。 好处是root定一个级别,进去后可以灵活的使用多个级别。
mingjie
2022/05/12
1930
Log4j2使用案例
Log4j 漏洞修复和临时补救方法
在这里面我们可以看到使用${}可以实现漏洞的注入,假设username为用户登录的输入框,即可从这个输入框进行注入,既可查看到一些后台系统信息,如果有黑客在使用JNDI编写恶意代码注入的话,后果是非常严重的。
FHAdmin
2021/12/14
1.2K0
Java日志框架学习--LogBack和Log4j2--下
Logback当前分成三个模块:logback-core,logback- classic和logback-access。
大忽悠爱学习
2022/05/17
1.1K0
Java日志框架学习--LogBack和Log4j2--下
Log4j2 进阶使用
在复杂的项目中,可能有一些约定的属性比如项目名称、配置文件路径等等。这些属性可能会在多个日志的配置中用到。这样就可以将这些属性配置到Log4j2的配置文件中,方便在多个Logger中共享。
BUG弄潮儿
2022/06/30
4230
Log4j2 进阶使用
Log4j2 日志
Apache Log4j2 是 Log4j 的升级,对其前身 Log4j 1.x进行了重大改进,并提供了Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。
JanYork_简昀
2022/05/23
3680
Log4j2 日志
Springboot整合log4j2日志全解
上述介绍的是一些日志框架的实现,这里我们需要用日志门面来解决系统与日志实现框架的耦合性。SLF4J,即简单日志门面(Simple Logging Facade for Java),它不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。
用户1212940
2020/07/10
5.6K0
Springboot整合log4j2日志全解
log4j 1.x到2.x迁移指南
本页介绍如何迁移当前使用 Log4j 1.x API 的应用程序或库,以使用 Log4j v2 作为其主要日志框架。
从大数据到人工智能
2022/06/15
2.2K0
log4j 1.x到2.x迁移指南
相关推荐
Log4j1升级Log4j2实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文