细说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 ...
随机推荐
- Shell 字符截取命令 awk
awk命令# awk '条件1{动作1} 条件2{动作2}….' 文件名一般使用关系表达式作为条件动作:1.格式化输出 2.流程控制语句 处理cut命令无法截取空格的列 例子:截取出磁盘使用率 df ...
- 在浏览器中浏览git上项目目录结构
效果如下,参考:https://gitee.com/oschina/GitCodeTree
- angular2路由与express路由冲突的问题
angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...
- webpack入门(四)webpack的api 2 module
接着介绍webpack的module. module Options affecting the normal modules (NormalModuleFactory) 这些选项影响普通的模块 m ...
- ajax 执行成功 没有返回
提交表单 或执行ajax 的按钮,只能使用 input type=“button” 标签
- 洛谷P4219 大融合
LCT新姿势:维护子树信息. 不能带修,子树修改就要toptree了... 题意:动态加边,求子树大小. 解: 维护子树信息只要额外维护虚边连的儿子的信息即可.这里把siz的定义变成子树大小. 哪里会 ...
- bzoj3331 压力(圆方树)
题目链接 圆方树 圆方树就是对于联通无向图中的每一个点双新建一个方点,与点双中的每个点连一条边,然后将原来的边删去.将原来的点看作圆点,新建的点看作方点.所以叫做圆方树. 性质 1.圆方树肯定是棵树( ...
- django 前端 js让一段文本中包含的网址可以被访问
这个功能还是挺刚需的,下面说说实现过程,用到了正则表达式. 1.原本的html部分代码: <h4 id="softadd">链接: https://pan.baidu. ...
- ajax多表单序列化
今天在修一个后台接收参数为空值的bug 找了好久才发现原来是form表单合拼参数的时候把参数给搞没了 (我也不知道为什么啊—_—!) //对表单进行Json对象序列化 (function($){ $. ...
- Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)
Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...