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

1. 主要组件:
从图中可以看出,log4j2中的主要组件为:Filter,Appender,Logger,他们的层次关系为:
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 配置框架:
简洁模式:
<?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>
严格模式:
<?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种配置模式进行配置,如下:
简洁模式:
<?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>
严格模式:
<?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对象为例说明:
log4j1: org.apache.log4j.Logger.getLogger(clazz)
log4j2: org.apache.logging.log4j.LogManager.getLogger(clazz)
代码片段:
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
细说log4j之log4j 2.x的更多相关文章
- 细说log4j之log4j 1.x
官网:http://logging.apache.org/log4j/1.2/manual.html 三大组件:loggers,appenders,layouts. LoggersLogger是一个层 ...
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- 【Log4j】 log4j.properties 使用
一.参数意义说明 输出级别的种类 ERROR.WARN.INFO.DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如 ...
- Log4j、Log4j 2、Logback、SFL4J、JUL、JCL的比较
Log4j.Log4j 2.Logback.SFL4J.JUL.JCL的比较 之前就知道有好几种日志框架,但是一直都是听别人讲,在什么时候该用何种logger,哪种logger比较好……一直对Log4 ...
- Log4J:Log4J三大组件:Logger+Appender+Layout 格式化编程详解
快速了解Log4J Log4J的三个组件: Logger:日志记录器,负责收集处理日志记录 (如何处理日志) Appender:日志输出目的地,负责日志的输出 (输出到什么 地方) Layo ...
- Log4j – Configuring Log4j 2 - Log4j 2的配置
Configuration Inserting log requests into the application code requires a fair amount of planning an ...
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
log4j 就是log for java嘛,老外都喜欢这样子,比如那个I18n ---internationalization 不就是i和n之间有18个字母... http://logging.a ...
- maven web项目配置log4j,及log4j参数设置
本文为博主原创,转载须注明转载地址: 1.在maven项目中引入相关的依赖: 需要依赖的jar为: <!-- 配置日志 --> <dependency> <groupId ...
- Log4j:log4j.properties 配置解析
Log4j 三个主要组件 Loggers(记录器):记录日志的工具,程序中就是用它来记录我们想要的日志信息. Appenders (输出源):日志输出到什么地方,可以是控制台.文件.流位置.数据库,等 ...
- Log4j介绍,log4j.properties配置详解
http://www.cnblogs.com/simle/archive/2011/09/29/2195341.html本文主要解释log4j的配置文件各个配置项的含义,内容是从网上转载的 1.Log ...
随机推荐
- 使用树莓派 Raspberry Pi 播放豆瓣 FM
安装 mplayersudo apt-get install mplayer 安装 Python-pipsudo apt-get install python-pip 通过 python-pip 安装 ...
- 使用页面Cookie做ABTest测试
背景介绍: 公司为了提升网站销售,做了2种不同风格的Bug页面,需要测试哪个页面的销售效果更好,使用了ABTest. 原理: 当用户访问www.website.com/buy.php时,生成一个随机数 ...
- Android 2019最新面试实战总结
Android: 今日头条屏幕适配的原理? 1:首先计算出 density,计算公式:当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = densitydensity 的意思就是 1 ...
- Leetcode 75.颜色分类 By Python
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- centos7/RHEL7下快速搭建DNS域名解析服务器
应用场境:此处搭建的DNS(Domain Name Server)更加偏向于企业内部需要一个域名服务器专门用来解析自己局域网内定义的域名: 比如:app1.company.com, app2.comp ...
- [WC2018]州区划分
[WC2018]州区划分 注意审题: 1.有序选择 2.若干个州 3.贡献是州满意度的乘积 枚举最后一个州是哪一个,合法时候贡献sum[s]^p,否则贡献0 存在欧拉回路:每个点都是偶度数,且图连通( ...
- Go 语言和 Scala 语言对比
我在Google写过Go(自己的业余时间),也在LinkedIn写过Scala.两者都是具有一流的并发特性的现代语言. 下面的回答是基于我编写大规模的软件的经验得出. Go是一种开发模式严格固定,并且 ...
- QML学习笔记(四)-TabView-竖直方向
源码:https://github.com/sueRimn/QML-ExampleDemos 作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 想实现垂直竖直方向的Ta ...
- 记一次 HTTP信息头管理器使用 的重要性
今天在测试中遇到了一个问题 使用JMeter时请求相关地址参数及方法都填写正确,但是相应数据返回始终不对,例如 查看取样器结果显示 200 正常,但响应数据不符合正常的结果. 经反复检查发现问题如下: ...
- terminate called without an active exception异常
在gcc4.4下,采用回调机制写了一个类似std::thread的线程类. 但是使用时却发生了核心已转移的错误. main函数调用的代码大致是 int main(int argc, char *arg ...