log4j源码配置文件|log4j的使用步骤

⑴ java中log4j源码中是怎么把替换为后面的参数的

在web.xml中添加配置:下面使用了classpath参数指定log4j.properties文件的位置,这样log4j的配置文件就不用非要放到src的下面:log4jConfigLocationclasspath:config/log4j/log4j.properties使用spring的监听器,当应用启动时来读取log4j的配置文件org.springframework.web.util.Log4jConfigListener

⑵ log4j.properties 的作用是什么求详解

Log4j是Apache的一个开源项目,如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找source folder下的log4j.xml配置文件。

若没有会寻找log4j.properties文件加载配置。配置文件放置位置正确,不用在程序中手动加载log4j配置文件。如果将配置文件放到了config文件夹下,在build path中设置下即可。

通常一个java项目会有很多的配置文件,建议把所有的配置文件放到一个文件夹下,如果不手动设置,不用人为的写加载log.properties文件的代码时,直接放src目录下,千万要记得,如果新建一个java项目,src文件要弄成原文件包才行。

(2)log4j源码配置文件扩展阅读:

使用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源码分析

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<String,StrLookup>的方式,封装了很多StrLookuo对象,key则对应巧拆歼参数占位符${prefix:key}中的prefix.

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

当参数占位符${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<PatternConverter>转换器列表和List<FormattingInfo>格式信息列表.

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

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

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

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

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

有时我们需要对特定的转换器进行特殊的配置,如:给DatePatternConverter配置时间格式,这个时候需要通过选项字符串配置. PatternParser会提取模式字符串中的所有选项,保存在一个List<String>中,每个{}包裹的内容作为一个选项. 当创建转换器时,框架会自动扫描转换器类中声明的静态工厂方法newInstance,同时支持两种可选的形参,一种是Configuration,另一种String[]则会注入选项列表. 选项列表的识别由不同的转换器各自定义.

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

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

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

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

框架实现的过滤器如下:

⑷ log4j 读取系统环境变量

最近项目需要使用log4j记录日志,log4fj.properties配置文件的片段如下: ${PIF_CONF}就配置在/etc/profile文件中,但是测试了几次,根本就没有生效,根据网友的解决方案也没有解决。 于是决定自己看log4j的让坦源码org.apache.log4j.helpers.OptionConverter.java 文件,发现仿滑段log4j 读取环境变量使用System.getProperty(),通过测试程序,备誉发现System.getProperty("PIF_CONF") 为null,System.getenv("PIF_CONF") 确实获取到了PIF_CONF的内容。 所以在spring context 初始化的时候采用System.getenv("PIF_CONF") +System.setProperty("PIF_CONF","XXXX")将PIF_CONF设置进props。这样,log4j就可以读取到log path了。

⑸ log4j的使用步骤

1.将log4j-1.2.14.jar加入你的项目中;2.在src/下创建log4j.properties|log4j.xml文件;3.在web.xml中配置log4j的信息,如下:<context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>4.在项目webroot下创建你想要保存日志文件的文件夹及文件,如webroot/logs/web_app.log;具体log4j.properties文件,给你一个示例吧,如下:log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] – %m%nlog4j.appender.stdout.layout.ConversionPattern=- %m%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=${webapp.root}/logs/webapp.loglog4j.appender.logfile.MaxFileSize=512KB# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=3# Pattern to output: date priority [category] – messagelog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%d %p [%c] – %m%nlog4j.logger.com.opensymphony.xwork2=ERROR # Control logging for other open source packageslog4j.logger.org.springframework=ERRORlog4j.logger.org.quartz=ERRORlog4j.logger.net.sf.ehcache=ERRORlog4j.logger.net.sf.navigator=ERRORlog4j.logger.org.apache.commons=ERRORlog4j.logger.org.apache.struts=ERROR# Struts OgnlUtil issues unimportant warnings log4j.logger.com.opensymphony.xwork2.util.OgnlUtil=error log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack=error 具体写法可根据自己的项目进行配置。

⑹ shiro框架 配置文件log4j.properties shiro在哪

log4j.properties和shiro没关系哦。

推荐一套完整的Shiro Demo,免费的。

Shiro介绍文档:http://www.sojson.com/shiroDemo已经部署到线上,地址是http://shiro.itboy.net,

管理员帐号:admin,密码专:sojson.com 如果密码错误,请用sojson。PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,属每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快。

⑺ 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、测试效果图

四、源代码地址

⑻ jsp中log4j.properties是什么文件

log4j.properties是Log4j的配置文件,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目版的地是控制台、文权件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言 分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。在参考资料里有说详细配置方法的参考资料:


赞 (0)