百度
360搜索
搜狗搜索

log4j配置文件详解xml,Log4j2详解——XML配置示例(带详细注释)详细介绍

本文目录一览: log4j的详细配置

加载log4j.properties配置文件需要在web.xml中配置一些信息,配置如下:

File文件的路径配置方法:
1.使用绝对路径,把日志文件放到一个固定的位置,例如D:/logs/log.log。
2.使用环境变量:

A: {user.home}/logs/log.log是把日志文件放到个人用户目录下,系统不同位置可能会有差异,以我的电脑系统(win10)和个人配置为例,${user.home}/logs/log.log代表C:\Users\kzhzhang\logs\log.log。

B: {catalina.home}/logs/error.log是把日志文件放到tomcat第一层目录下。

C: {webApp.root}/logs/error.log是把日志文件放到发布到tomcat下的项目内部,使用这个变量需要在web.xml中配置一些信息,配置如下,

3.设置一个监听器实现ServletContextListener,在项目启动的时候初始化日志保存目录:

在log4j.properties文件中使用log4jdir(变量名称可以随便命名,注意保持一致)变量配置日志文件位置,例如${log4jdir}/log.log,另外还需要在web.xml中配置监听器,配置如下:

ConversionPattern参数的格式含义

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查看操作日志命令

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详解——XML配置示例(带详细注释)

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

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的配置的一些总结,更多信息请关注官方文档。

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

log4j在java的web项目中怎么用的,如何配置等等。。

在web.xml中添加配置:

下面使用了classpath 参数指定log4j.properties文件的位置,这样log4j的配置文件就不用非要放到src的下面:

log4jConfigLocation

classpath:config/log4j/log4j.properties

使用spring的监听器,当应用启动时来读取log4j的配置文件

org.springframework.web.util.Log4jConfigListener

log4j.rootLogger=INFO, stdout, fileout
log4j.logger.org=ERROR
log4j.logger.com.gwall=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS}[%p][%F:%L][%t]%x %m%n
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=C:/Gwall_log/Gwall.log
#log4j.appender.fileout.File=C:/Gwall_log/Glog.html
log4j.appender.fileout.MaxFileSize=2048KB
log4j.appender.fileout.MaxBackupIndex=2000
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
#log4j.appender.fileout.layout=org.apache.log4j.HTMLLayout
log4j.appender.fileout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS}[%p][%F:%L][%t]%x %m%n
首先,把上面的内容在src下面建个文件:log4j.properties,放到里面(上面的东西你应该可以看懂的)
其次,导入名字:log4j-1.2.13.jar的jar包
最后,你就可以在你想输出的地方找到你自己的日志文件了
直接丢到lib下不就完事了么。。。这也就是个第3方JAR包,然后你代码里import进来就能用Log.XXX之类的方法了。。。
如果说你想说用在什么地方。。。一般写error写在在catch里,info类写在你项目的service中间处理类里,类似MVC的C里,记录请求的IP地址,开始到结束时间,请求的方法,具体类名等等
如果说的是xml配置。。
参见百度文库。。。
http://wenku.baidu.com/view/7447d00d763231126edb118b.html

【日志】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基本使用入门

Apache Log4j 2是日志框架Log4j的升级,
它比其前身Log4j 1.x提供了重要的改进,
并且参考了Logback中许多有用的改进,
同时修复了Logback的一些固有问题。
详细请参考官网: Apache Log4j 2
本文介绍Log4j2的常用功能,
给出相应功能的参数配置方法,
最后给出一个完整的log4j2.xml配置文件,
作为工作开发中常用的日志配置参考。

在Maven的父工程pom.xml添加如下依赖:

在Maven的父工程pom.xml添加如下依赖管理:

然后在使用Log4j2的子工程pom.xml添加如下依赖,
这样就不用写具体的版本号了,
保证项目的子工程都使用相同版本的Log4j2。

在复杂场景下,可能不止依赖上面两个jar包,
这种方法可以保证Log4j2模块之间的版本一致。

为了演示Log4j2的功能,创建如下的测试类:

运行上面的测试程序,
在控制台打印出如下日志:

可以看到ERROR报错了,没有找到Log4j2的配置文件,
使用了默认配置,只打印error级别日志到console控制台,
然后控制台输出了error和fatal两个级别的日志信息。

Log4j2共有8种日志级别,
按照优先级从小到大排序:

当日志级别设置为某一级别时,
则会打印大于等于该级别的日志,
比如日志级别设置为ERROR,
则会打印ERROR,FATAL级别的日志。
ALL会把所有级别的日志打印出来,
OFF不会打印任何级别的日志,
所以严格来讲只有6种日志级别。

Log4j2能够在初始化期间自动配置,
它支持4种格式的配置文件:
Properties, YAML, JSON, XML
并且按从高到低的加权顺序查找配置文件。

Log4j2启动时,首先检查系统属性log4j.configurationFile,
如果设置了该属性,则匹配文件扩展名去加载配置文件,
就是说文件名可以是任意的,文件扩展名必须是上面的4种之一。
在启动应用时配置该参数,示例如下:

log4j.configurationFile可以配置如上的绝对路径,
也可以配置相对路径,即只配置文件名myLog4j2.xml,
Log4j2会在classpath路径中查找配置文件。

如果没有设置系统属性,
则在classpath路径中按照顺序查找如下4个文件:

如果找不到上面的文件,
则在classpath路径中按照顺序查找如下4个文件:

如果无法找到任何配置文件,
则使用默认配置文件,
这将导致日志输出到控制台。

在第4步中打印日志找不到配置文件,
使用的默认配置等价于下面的配置:

在上面的默认配置文件中,
主要有两类配置,
一类是Appenders:定义日志输出目的地,内容和格式等。
另一类是Loggers:定义日志级别和使用的Appenders。

表示日志输出到控制台的标准输出。

pattern定义日志输出格式:

实际会输出如下日志:

更多的PatternLayout设置请参考官网:
Log4j2 PatternLayout

新建log4j2.xml文件,
添加上面第7步的默认配置,
放到classpath路径下,
则应用启动时会读取该文件,
下面以该xml文件为例,
通过修改相应的配置,
演示Log4j2的功能。

实际上Log4j2的配置可以通过以下四种方式中的一种来完成:

本文主要介绍第1种,
详解XML格式文件的编写配置。

Log4j2内部日志可以输出到控制台,
status控制Log4j2内部日志的输出级别,
它的值可以填第5步中的日志级别,
Log4j2会输出初始化、翻转和其他内部操作的详细信息。
设置status="TRACE"对定位Log4j2问题非常有用。

也可以设置系统属性log4j2.debug,
也会将Log4j2内部日志打印到控制台,
包括在找到配置文件之前发生的内部日志。
在启动应用时配置该参数,示例如下:

Log4j2能够自动检测配置文件的修改,
并且自动重新加载配置。
通过在Configuration元素上配置monitorInterval属性,
并将其设置为非零值,
那么在下一次计算或记录日志事件,
且自上次检查以来已经超过monitorInterval时间,
则将检查该文件是否被修改。
注意时间单位默认为秒,
而且最小时间间隔是5秒。

如上示例为每隔至少5秒检查一次配置文件,
如果配置文件有变化则自动重新加载。

这里增加了一个类型为File的Appender,
name为File,
FileName为test.log,
表示日志会打印到test.log文件。

这里增加了一个Logger,需要配合上面的Appender使用,
name为Log4j2Test的包路径org.apache.logging.log4j,
level日志级别为EEROR,
AppenderRef指向了上面新增的名称为File的Appender,
表示Log4j2Test的ERROR和FATAL级别的日志会打印到test.log,
test.log文件内容:

同时additivity设置为true,
会将当前的Logger特性会传递给Root,
即上述的日志不仅会输出到test.log文件,
也会输出到Root指向的控制台,
Console控制台内容:

阅读更多 >>>  linux命令与日志

可以看到和上面文件中的内容一模一样。

Log4j2 入门教程
Log4j2 配置文件
Log4j2 Appenders
Frequently Asked Questions

如何配置log4j2日志记录至数据库

配置log4j2日志记录至数据库
1、建立用于保存日志的数据库表:
CREATE TABLE `sys_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `level` varchar(32) NOT NULL, `logger` varchar(100) NOT NULL, `message` varchar(1000) DEFAULT NULL, `exception` varchar(10000) DEFAULT NULL, `date_add` datetime NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4;2、配置 databaseAppender :

3、其中 cc.s2m.web.s2mBlog.util.StaticProp 类的getDatabaseConnection方法为获取可用的datasource:

DriverManagerDataSource ds = new DriverManagerDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl("jdbc:mysql://127.0.0.1/s2mBlog?characterEncoding=utf8");ds.setUsername("root");ds.setPassword("123456");return ds.getConnection();

4、指派需要记录的日志,使用 databaseAppender 即可:

一、前提条件 系统必须是使用LOG4J进行日志管理,否则方法无效。 系统必须包含中国mons-logging-xxx.jar,log4j-xxx.jar这两个JAR包,XXX为版本号。 二、操作步骤 1、创建日志表 要把日志持久化,必须在数据库中创建一张用来存储日志信息的表,表内字段为日志 的一个主要属性包括:操作类,执行方法,打印时间,日志级别,日志内容。 CREATE TABLE RESLOG (LOGID VARCHAR2(20) NOT NULL, CLASS VARCHAR2(200), METHOD VARCHAR2(100), CREATETIME DATE, LOGLEVEL VARCHAR2(50), MSG VARCHAR2(4000)) 因为存储的类为类的全部路径,所以CLASS字段长度需要比较大。 2、日志管理配置 LOG4J主要有两种配置文件.properties和.xml,这里以properties文件为基础来讲 述,关于XML文件的配置,相信大家看完下面的介绍也一样能轻松完成。 通常在LOG4J.PROPERTIES文件的第一行是: log4j.rootLogger= XXX,这句是控制日志的输出,如果想吧日志输出到数据库, 则需要在XXX中添加“DB”,如log4j.rootLogger=INFO,stdout,Platform,db。上面 这句就是把日志中级别为INFO的信息输出到STDOUT,PLATFORM和DB (DATABASE)中。 配置好如上的信息,LOG4J就知道用户是想把信息存入数据库,接下来我们就要来 配置数据库的相关信息(包括缓存,数据库连接信息,和执行SQL),配置信息如下: ###JDBCAppender log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender //这个配置是选择使用JDBCAppender方法,将日志信息存储到数据库。当然,如果你还要做其他操作,可以自己写个类,继承JDBCAppender就OK了。 log4j.appender.db.BufferSize=1 //这个配置是告诉LOG4J,有中国条日志信息后才存入数据库,我这里是1,就是说有一条就查一条,显然这样在生产环境下是很影响系统性能的。 log4j.appender.db.driver=oracle.jdbc.driver.OracleDriver //这个配置是告诉LOG4J,做数据库存储所用的驱动。 log4j.appender.db.URL=jdbc:oracle:thin:@:: //这个配置数据库连接的URL,不用说也都知道。 log4j.appender.db.user=XXX log4j.appender.db.password=XXX //上面两个是数据库连接时的用户名和密码 log4j.appender.db.sql=insert into RESLOG (LogId,Class,Method,createTime,LogLevel,MSG) values (SQ_RESLOG_LOGID.Nextval,'%C','%M', to_date('%d{yyyy-MM-dd HH:mm:ss}','yyyy-MM-dd HH24:mi:ss'),'%p','%m') //这个配置是告诉当LOG4J吧日志存储数据库时用的SQL语句。SQ_RESLOG_LOGID.Nextval是我建的一个SEQUENCE;‘%C’是日志中的CLASS;‘%M’是打印日志是执行到类里的方法;‘%d’是打印的时间,它支持格式化;‘%P’是日志级别,包括INFO、DEBUG、ERROR等;‘%m’是MSG,日志内容。注意这里的参数区分大小写。 log4j.appender.db.layout=org.apache.log4j.PatternLayout 通过上面的配置,现在再启动服务,LOG4J就会自动把原来存储在.LOG文件中的信息,同时存储到数据库了

网站数据信息

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