百度
360搜索
搜狗搜索

log4j配置文件详解,log4j.properties 的作用是什么?求详解详细介绍

本文目录一览: log4j.properties 的作用是什么?求详解

Log4j是Apache的一个开源项目,如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找source folder下的log4j.xml配置文件。
若没有会寻找log4j.properties文件加载配置。配置文件放置位置正确,不用在程序中手动加载log4j配置文件。如果将配置文件放到了config文件夹下,在build path中设置下即可。
通常一个java项目会有很多的配置文件,建议把所有的配置文件放到一个文件夹下,如果不手动设置,不用人为的写加载log.properties文件的代码时,直接放src目录下,千万要记得,如果新建一个java项目,src文件要弄成原文件包才行。
扩展资料:
使用log4j注意事项:
1、log4j.properties的配置文件需放在src(或者WEB/INFO/classes)目录下,启动tomcat进程时log4j引擎也会随之启动(也就是log4j会自动初始化)。
2、如果log4j.properties配置文件放在别的目录,则需要应用程序负责初始化log4j,如spring提供了一个初始化log4j的监听类,当然你也可以自已写个servlet初始化log4j。
3、log4j.properties里面的配置key=value时,value后面一定不能有空格,否则该项配置不能生效,因为log4j没有处理value后面的空格。
参考资料来源:百度百科-log4j

log4j2配置文件详解(springboot+slf4j+log4j2+yaml+lombok)

log4j2配置文件学习笔记:
说明1:本文主要针对yml配置,其他xml配置或者json配置。
说明2:下面是大致介绍了结构,什么作用,当然还有其他分类,比如:logger,AsyncLogger | appenders fileAppenders | rollingFile,rollingRandomAccessFile这些不同的分类和里面具体的参数设置。见官网,官网写的非常好: log4j2官网

yaml格式可以参考: YAML语法入门
大致配置(比较长,看有注释的就可以,没注释的大致都相同):

备注:关于各种filter的配置参数见: 官网filter介绍

springboot+slf4j+log4j2+yaml中使用:主要是@slf4j(topic="自定义的logger name")。
其实@slf4j注解就是实现:

log4j2 配置简要分析

对于做后端的同学来说,log是分析bug、查找问题不可或缺的工具,好的日志配置将使我们的开发工作如虎添翼。 把视线聚焦到java,常用的日志工具有log4j,log4j2以及logback等,其中log4j2功能较为强大,运行效率也较高,我们就来用一个例子看一看log4j2的配置思路,下面就是这个配置文件:

我们看到,Configuration有2个属性status和monitorInterval,它们分别是log4j2自身组件的日志级别以及重新刷新配置文件的时间,通过配置status可以看到log4j2相关的日志,配置monitorInterval可以通过修改配置文件来改变日志配置。

从上面的log4j2.xml配置文件中,我们可以看到log4j2的配置文件中主要分为2块,一块为appender,描述了如何记录日志,另外一部分是log config,记录了哪种日志对应哪种级别。 而不同的LogConfig之间其实是有继承关系的,子LogConfig会继承parent的属性,而所有LogConfig都继承自Root LogConfig。所以即使只配置了root logger,你一样可以在任何地方通过LoggerFactory.getLogger获取一个logger对象,记录日志。

那么日志之间的继承关系是由什么决定的呢?看看上面的配置文件中root以外的2个logConfig,只有3个配置:日志级别,name以及appender,从直觉上看应当是name最可能决定了LogConfig的继承关系,其实也正是如此:com.foo是com.foo.Bar的父级;java是java.util的父级,是java.util.vector的祖先(注意name区分大小写)。

理解了这一点,我们就能理清log4j2配置的思路:先配置一个root,让所有需要使用日志的logger继承,然后对有特别需要的logger进行特殊的配置,比如我们希望 org.springframework 包只记录error以及warn级别的log,再比如,我们希望能显示mybatis执行的sql的日志,都可以进行个性化的配置。

appender是LogConfig的重要组成部分,一个LogConfig可以使用多个appender,一个appender也可以被多个LogConfig使用,appender多种多样,不同的appender也有不同的属性和配置,难以一一阐述,需要使用时可以直接查看文档来进行个性化配置。不过就filters可以单独拿出来讨论一下。filter有两个重要属性 onMatch 和 onMismatch 。可以有DENY、ACCEPT或NEUTRAL配置,DENY说明不由当前appender处理,ACCEPT说明由当前filter处理,而NEUTRAL说明如果按顺序还有其他filter则由其他filter处理,如果当前filter已经是最后一个filter,则由当前appender处理。

log4j2的官方文档建议记录程序行为日志异步日志,效率更高。因为异步日志使用的是无锁技术,所以需要引入 Disruptor 。然后可以通过配置异步的appender或Logger来实现异步日志:

动态修改日志级别是一个很实用的功能,关于如果动态修改日志级别,请参考美团的一篇文章: 日志级别动态调整——小工具解决大问题

以上就是对log4j2的配置的一些总结,更多信息请关注官方文档。

LOG4J2 完整配置详解

-第一部分:完整配置模板 -第二部分:各模块介绍 -第三部分:参考引用
-Appenders:包含以下标签
FileAppender    普通地输出到本地文件 FlumeAppender   将几个不同源的日志汇集、集中到一处 RewriteAppender   对日志事件进行掩码或注入信息 RollingFileAppender  对日志文件进行封存 RoutingAppender  在输出地之间进行筛选路由 SMTPAppender  将LogEvent发送到指定邮件列表 SocketAppender  将LogEvent以普通格式发送到远程主机 SyslogAppender  将LogEvent以RFC 5424格式发送到远程主机 AsynchAppender   将一个LogEvent异步地写入多个不同输出地 ConsoleAppender  将LogEvent输出到控制台 FailoverAppender  维护一个队列,系统将尝试向队列中的Appender依次输出LogEvent,直到有一个成功为止
-PatternLayout

【日志】Log4j2配置

在同步日志模式下, Logback的性能是最糟糕的,log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的。本章主要介绍Spring Boot如何集成并配置使用Log4j2
引入Log4j2依赖包,其它依赖和Logback一样,使用SLF4J统一输出
然后需要在resource下面添加log4j2.xml配置文件,当然了如果你不添加,springboo会提示你没有对应文件,并使用默认的配置文件,这个时候级别可以在application.properties中配置
和logback配置类似,主要是含有loggers、appenders,其中loggers由logger,root组成。appenders由console(控制台),File、RollingFile(输出文件)组成,作用和配置和logback差不多
(1)Console 用来定义输出到控制台的Appender,主要设置输出格式和level级别
ThresholdFilter: 定义打印级别,onMismatch值设置是否拒绝其它 (2)File 用来定义输出到指定位置的文件的Appender
(3)RollingFile 用来定义超过指定条件自动删除旧的,创建新的Appender
参数说明:
Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
参数说明:
变量配置,类似常量定义
默认情况下springboot是不将日志输出到日志文件中,这里对日志框架的支持有两种配置方式(和logback一样): (1)application.properties 或 application.yml (系统层面) (2)logback-spring.xml (自定义文件方式)
默认名log4j2-spring.xml,可以省下在application.yml中配置,如果自定义了文件名,需要在application.yml中配置
此种方式可以处理比较复杂的情况,比如区分 info 和 error 日志、每天产生一个日志文件。
通过在DefaultRolloverStrategy 标签下添加Delete标签实现,保留7天的日志
IfLastModified .age要和filePattern精确的时间一致, 否则貌似无效.

Log4j2详解——XML配置示例(带详细注释)

下面是 Log4j 2 的 XML 配置详细示例,包含按日志级别输出日志,按年月日目录自动归档日志文件,日志文件过多时按文件总大小上线和保存天数上限自动删除的功能,足够日常使用。

log4j2源码分析

1.概述 1.1.组件概览 1.2.灵活的配置 1.2.1.插件发现机制 1.2.2.插件装配机制 1.2.3.配置文件基本元素与对象的映射关系 2.属性占位符 2.1.概述 2.2.Interpolator插值器 2.3.默认属性配置 3.Logger 3.1.配置示例 3.2.配置详解 3.3.Logger继承机制 4.Appender 4.1.概述 4.2.框架支持的Appender实现 4.3.常用Appender详解 4.3.1.ConsoleAppender 4.3.2.RollingFileAppender 5.Layout 5.1.概述 5.2.PatternLayout 5.2.1.模式字符串 6.Manager 7.Filter
在log4j2中,LogManager就是日志的门面,相当于slf4j-api中的LoggerFactory. 框架为每个类加载分配了一个单独的LoggerContext,用于管理所有创建出来的Logger实例. ContextSelector则负责管理类加载器到对应的LoggerContext实例之间的映射关系. log4j2中,有5个关键概念:
组件架构如下:
在log4j2中,一切皆插件,框架通过 PluginRegistry 扫描并发现插件配置.
PluginRegistry 支持两种扫描方式
插件配置以 PluginType 的形式保存在插件注册表中, PluginType 的作用类似于spring中 BeanDefinition ,定义了如何创建插件实例. 插件类通过 @PluginFactory 注解或者 @PluginBuilderFactory 注解配置插件实例的实例化和属性注入方式.
log4j2知道如何实例化插件后,我们就可以通过编写配置文件(如:log4j2.xml),进行插件的实例化和属性注入了. Configuration 全局配置对象负责保存所有解析到的配置. 通过 ConfigurationFactory.getConfiguration() 可以使用不同的工厂生产不同的配置对象,不同的 Configuration 实现可以解析不同格式的配置,如:xml,yaml,json等.
以xml文件为例,文件中每个元素都会最终对应一个插件实例,元素名称实际就是PluginType中的name,实例的属性可以从子元素对应的实例获取,也可以从自身元素的属性配置获取.
因此,xml中dom树的元素嵌套关系,也就是log4j组件实例的引用嵌套关系.
xml,yaml,json格式文件都可以描述这种嵌套关系,因此log4j2中定义了与文件格式无关的数据结构,Node来抽象配置.
AbstractConfiguration.setup() 负责提取配置,形成Node树. AbstractConfiguration.doConfigure() 负责根据Node树,进行插件实例化和属性注入.
在log4j2中,环境变量信息(键值对)被封装为StrLookup对象,该对象作用类似于spring框架中的PropertySource.
在配置文件中,基本上所有的值的配置都可以通过参数占位符引用环境变量信息,格式为:${prefix:key}.
Interpolator内部以Map

的方式,封装了很多StrLookuo对象,key则对应参数占位符${prefix:key}中的prefix.

同时,Interpolator内部还保存着一个没有prefix的StrLookup实例,被称作默认查找器,它的键值对数据来自于log4j2.xml配置文件中的

元素的配置.

当参数占位符${prefix:key}带有prefix前缀时,Interpolator会从指定prefix对应的StrLookup实例中进行key查询,

当参数占位符${key}没有prefix时,Interpolator则会从默认查找器中进行查询.

Interpolator中默认支持的StrLookup查找方式如下(StrLookup查找器实现类均在org.apache.logging.log4j.core.lookup包下):

注意:Properties元素一定要配置在最前面,否则不生效.

log4j2框架会根据LoggerConfig的name建立对象之间的继承关系.这种继承机制与java的package很像,name以点进行名称空间分割,子名称空间继承父名称空间. 名称空间可以是全限定类名,也可以是报名.整个配置树的根节点就是RootLogger. 举例:假如我们的配置的Logger如下:

当通过LogManager.getLogger(name)获取Logger实例时,会根据name逐级递归直到找到匹配的LoggerConfig,或者递归到Root根节点为止.

追加器,负责控制Layout进行LogEvent的序列化,以及控制Manager对序列化后的字节序列进行输出.

在log4j2.xml配置文件中,配置方式如下:

控制台追加器,用于把日志输出到控制台,一般本地调试时使用. 配置示例如下:

文件滚动追加器,用于向本地磁盘文件中追加日志,同时可以通过触发策略(TriggeringPolicy)和滚动策略(RolloverStrategy)控制日志文件的分片,避免日志文件过大. 线上环境常用.

常用的触发策略包含两种:

滚动策略的实现包含两种:

配置示例如下:

布局对象,职责是把指定的LogEvent转换成可序列化对象(如:String),或者直接序列化成字节数组.

log4j2支持很多的序列化格式,如:普通模式字符串,JSON字符串,yaml字符串,XML格式字符串,HTML字符串等等.

类体系如下:

模式布局是我们最常使用的,它通过PatternProcessor模式解析器,对模式字符串进行解析,得到一个List

转换器列表和List

格式信息列表.

在PatternLayout序列化时,会遍历每个PatternConverter,从LogEvent中取不同的值进行序列化输出.

模式字符串由3部分组成,格式为:%(格式信息)(转换器名称){选项1}{选项2}...

模式字符串的格式为: %-(minLength).-(maxLength)(转换器名称){选项字符串} minLength代表字段的最小长度限制,当字段内容长度小于最小限制时,会进行空格填充. minLength前面的-负责控制对齐方式,默认为右对齐(左边空格填充),如果加上-,则会切换为左对齐方式(右边空格填充) maxLength代表字段的最大长度限制,当字段内容长度大于最大限制时,会进行内容阶段 maxLength前面的-负责控制阶段方向,默认为左侧阶段,如果加上-,则会切换为右侧阶段 minLength和maxLength之间用点分隔. 格式信息中所有属性都是可选的,不配置,则使用默认值

log4j2会通过 PluginManager 收集所有类别为Converter的插件,同时分析插件类上的 @ConverterKeys 注解,获取转换器名称,并建立名称到插件实例的映射关系. PatternParser识别到转换器名称的时候,会查找映射.

框架支持的所有转换器如下:

有时我们需要对特定的转换器进行特殊的配置,如:给DatePatternConverter配置时间格式,这个时候需要通过选项字符串配置. PatternParser会提取模式字符串中的所有选项,保存在一个List

中,每个{}包裹的内容作为一个选项. 当创建转换器时,框架会自动扫描转换器类中声明的静态工厂方法newInstance,同时支持两种可选的形参,一种是Configuration,另一种String[]则会注入选项列表. 选项列表的识别由不同的转换器各自定义.

最后,以一个实际的例子解释配置: 日志会输出时间,类名,方法名,消息以及一个换行符. 同时,我们给DatePatternConverter指定了了时间格式,并且限制全限定类名最小长度为5,右截断,最大为10,左对齐.

管理器的职责主要是控制目标输出流,以及把保存在ByteBuffer字节缓冲区中的日志序列化结果,输出到目标流中. 如:RollingFileManager需要在每次追加日志之前,进行滚动检查,如果触发滚动还会创建新的文件输出流. manager继承体系如下:

过滤器的核心职责就是对 LogEvent 日志事件进行匹配,匹配结果分为匹配和不匹配,结果值有3种:接受,拒绝,中立.可由用户自定义匹配和不匹配的行为结果.

所有实现了 Filterable 接口的组件都可以引用一个过滤器进行事件过滤,包含 LoggerConfig 和 AppenderControl 等.

框架实现的过滤器如下:

阅读更多 >>>  linux注释命令是什么意思

log4j的详解

Log4j支持两种配置文件格式,一种是XML(标准通用标记语言下的一个应用)格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法:①、配置根LoggerLogger 负责处理日志记录的大部分操作。其语法为:log4j.rootLogger = [ level ] , appenderName, appenderName, …其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL:打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。②、配置日志信息输出目的地 AppenderAppender 负责控制日志记录操作的输出。其语法为:log4j.appender.appenderName = fully.qualified.name.of.appender.classlog4j.appender.appenderName.option1 = value1…log4j.appender.appenderName.optionN = valueN这里的appenderName为在①里定义的,可任意起名。其中,Log4j提供的appender有以下几种:org.apache.log4j.ConsoleAppender(控制台),org.apache.log4j.FileAppender(文件),org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件。org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender定义一个名为stdout的输出目的地,ConsoleAppender为控制台。③、配置日志信息的格式(布局)LayoutLayout 负责格式化Appender的输出。其语法为:log4j.appender.appenderName.layout = fully.qualified.name.of.layout.classlog4j.appender.appenderName.layout.option1 = value1…log4j.appender.appenderName.layout.optionN = valueN其中,Log4j提供的layout有以下几种:org.apache.log4j.HTMLLayout(以HTML表格形式布局),org.apache.log4j.PatternLayout(可以灵活地指定布局模式),org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:%m 输出代码中指定的消息;%M 输出打印该条日志的方法名;%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL;%r 输出自应用启动到输出该log信息耗费的毫秒数;%c 输出所属的类目,通常就是所在类的全名;%t 输出产生该日志事件的线程名;%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”;%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2002-10-18 22:10:28,921;%l 输出日志事件的发生位置,及在代码中的行数。 我们在需要输出日志信息的类中做如下的三个工作:1、导入所有需的commons-logging类:import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员:private final Log log = LogFactory.getLog(getClass());LogFactory.getLog()方法的参数使用的是当前类的class。3、使用org.apache.commons.logging.Log类的成员方法输出日志信息:if (log.isDebugEnabled()){log.debug("111");}if (log.isInfoEnabled()){log.info("222");}if (log.isWarnEnabled()){log.warn("333");}if (log.isErrorEnabled()){log.error("444");}if (log.isFatalEnabled()){log.fatal("555");}2.3 如何应用记录器的层次2.3.1 如何定义及获取不同层次的记录器任何一个记录器的使用都有两个步骤:1) 在配置文件中定义相应的记录器。在配置文件中定义记录器的格式有两种? 定义根记录器的格式为log4j.rootLogger = [ level ], appendName1, appendName2, …appendNameN? 定义一个非根记录器的格式为log4j.logger.loggerName1 = [ level ], appendName1,…appendNameN……log4j.logger.loggerNameM = [ level ], appendName1, …appendNameN我们可以定义任意个非根记录器。2) 在代码中调用Logger类的取得记录器方法取得相应的记录器对象。要取得根记录器对象可通过Logger.getRootLogger()函数,要取得非根记录器可通过Logger.getLogger()函数。理论知道就讲到这里,纸上得来终觉浅,下面,我们来小小演练一下。例4-a: package TestLog4j;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import org.apache.log4j.Priority;import TestLog4j.TestLog4j2.TestLog4j2;public class TestLog4j{static Logger logger = Logger.getLogger(TestLog4j.class.getName()); //(2)public TestLog4j(){}public static void main(String[] args){//同时输出到控制台和一个文件的实例并实现了Logger的继承PropertyConfigurator.configure("F:\\nepalon\\log4j2.properties");logger.debug("Start of the main() in TestLog4j");logger.info("Just testing a log message with priority set to INFO");logger.warn("Just testing a log message with priority set to WARN");logger.error("Just testing a log message with priority set to ERROR");logger.fatal("Just testing a log message with priority set to FATAL");logger.log(Priority.WARN, "Testing a log message use a alternate form");logger.debug(TestLog4j.class.getName());TestLog4j2 testLog4j2 = new TestLog4j2(); //(1)testLog4j2.testLog();}}在类TestLog4j中我们调用了另一个类TestLog4j2,下面看一下类TestLog4j2的代码。例4-b:package TestLog4j.TestLog4j2;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import org.apache.log4j.Priority;public class TestLog4j2{static Logger logger = Logger.getLogger(TestLog4j2.class.getName()); //(1)public TestLog4j2(){}public void testLog(){//同时输出到控制台和一个文件的实例PropertyConfigurator.configure("F:\\nepalon\\log4j2.properties");logger.debug("2Start of the main()");logger.info("2Just testing a log message with priority set to INFO");logger.warn("2Just testing a log message with priority set to WARN");logger.error("2Just testing a log message with priority set to ERROR");logger.fatal("2Just testing a log message with priority set to FATAL");logger.log(Priority.DEBUG, "Testing a log message use a alternate form");logger.debug("2End of the main()");}}最后我们来看一下配置文件。例4-c:log4j2.properties文件内容#1区#### Use two appenders, one to log to console, another to log to a filelog4j.rootLogger = debug, stdout,R#2区#Print only messages of priority WARN or higher for your categorylog4j.logger.TestLog4j= , Rlog4j.logger.TestLog4j.TestLog4j2=WARN#3区#### First appender writes to consolelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the caller's file name and line number.log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n#4区#### Second appender writes to a filelog4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=F:\\nepalon\\classes\\TestLog4j\\example.log# Control the maximum log file sizelog4j.appender.R.MaxFileSize=100KB# Archive log files (one backup file here)log4j.appender.R.MaxBackupIndex=1log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n先看一下运行结果。在控制台中的结果为:DEBUG [main] (?:?) - Start of the main() in TestLog4jINFO [main] (?:?) - Just testing a log message with priority set to INFOWARN [main] (?:?) - Just testing a log message with priority set to WARNERROR [main] (?:?) - Just testing a log message with priority set to ERRORFATAL [main] (?:?) - Just testing a log message with priority set to FATALWARN [main] (?:?) - Testing a log message use a alternate formDEBUG [main] (?:?) - TestLog4j.TestLog4jWARN [main] (?:?) - 2Just testing a log message with priority set to WARNERROR [main] (?:?) - 2Just testing a log message with priority set to ERRORFATAL [main] (?:?) - 2Just testing a log message with priority set to FATAL输出文件的结果为:2003-12-19 04:19:44:DEBUG main TestLog4j.TestLog4j - Start of the main() in TestLog4j2003-12-19 04:19:44:INFO main TestLog4j.TestLog4j - Just testing a log message with priority set to INFO2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j - Just testing a log message with priority set to WARN2003-12-19 04:19:44:ERROR main TestLog4j.TestLog4j - Just testing a log message with priority set to ERROR2003-12-19 04:19:44:FATAL main TestLog4j.TestLog4j - Just testing a log message with priority set to FATAL2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j - Testing a log message use a alternate form2003-12-19 04:19:44:DEBUG main TestLog4j.TestLog4j - TestLog4j.TestLog4j2003-12-19 04:19:44:WARN main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to WARN2003-12-19 04:19:44:ERROR main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to ERROR2003-12-19 04:19:44:FATAL main TestLog4j.TestLog4j2.TestLog4j2 - 2Just testing a log message with priority set to FATAL首先,先来看一下配置文件都有些什么东西。1) 在1区中定义了一个根记录器。这个根记录器具有DEBUG级别并有一个名称为stdout的输出端appender。2) 2区中的内容是这一节的重点,也是应用到记录器层次的地方,但其实也只有两句,充分体现了log4j的简单性。在这里,我们定义了两个名称分别为TestLog4j和TestLog4j.TestLog4j2设计器。? 在定义TestLog4j记录器时没有指定级别,所以它的级别继承自它的父记录器,即根记录器,所以它的级别也为DEBUG。在定义TestLog4j记录器时又定义了一个名称为R的输出端,所以它的输出端有两个,一个从根记录器继承而来的名为stdout的输出端,另一个为在此定义的名为R的输出端。在此需要注意的是,在定义记录器时必须先定义记录器的级别,然后才是记录器的输出端。如果只想定义输出端而不定义级别,则虽然级别可以为空,但逗号分隔符不能省略。如定义TestLog4j记录器的做法。? 在定义TestLog4j.TestLog4j2记录器时又指定了它的级别,由于一个记录器的级别只能有一个,所以新指定的级别将覆写掉它的父记录器的级别(这就象Java中的多态)。我们没有定义TestLog4j.TestLog4j2记录器的输出端,所以它的输出端将从它的父记录器中继承而来。它的父记录器为estLog4j记录器,所以它和estLog4j记录器一样具有两个名称分别为 stdout和R的输出端。3) 剩下的3区和4区分别设置了两个输出端的参数值。接下来,回到我们的代码,看一下是如何取得记录器,在取记录器时又发生了什么。1) 例4-a中的代码(2)中,语句Logger.getLogger()中的参数TestLog4j.class.getName()的值为 TestLog4j. TestLog4j,所以此语句的结果是取得一个名为TestLog4j. TestLog4j的记录器的对象。但在配置文件中并没有定义这样的记录器,所以最终将返回与所需的名称TestLog4j. TestLog4j最接近的记录器对象,即名为TestLog4j的记录器的对象。2) 例4-b中的代码(1)的原理与例4-a中的代码(2)相似,期望取得的是名为TestLog4j.TestLog4j2. TestLog4j2的记录器对象,但最终返回的是TestLog4j.TestLog4j2记录器的对象。

阅读更多 >>>  linux怎么查看用户配置文件

SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境。
1、Log4j2特点
1)核心特点
相比与其他的日志系统,log4j2丢数据这种情况少;disruptor技术,在多线程环境下,性能高;并发的特性,减少了死锁的发生。
2)性能测试

2、日志打印之外观模式
每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,增加应用程序代码和日志框架的耦合性。
《阿里巴巴Java开发手册》,其中有一条规范做了『强制』要求:

SLF4J日志API
Java简易日志门面(Simple Logging Facade for Java,缩写SLF4J),是一套包装Logging 框架的界面程式,使用外观模式实现。
1、项目结构

2、不同环境的日志配置
使用最直接的方式,不同环境加载不同的日志配置。
1)开发环境配置
2)生产环境配置
3、Log4j2的配置文件
1、简单的测试程序
2、测试效果图

四、源代码地址

网站数据信息

"log4j配置文件详解,log4j.properties 的作用是什么?求详解"浏览人数已经达到23次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:log4j配置文件详解,log4j.properties 的作用是什么?求详解的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!