Ⅰ 非web程序怎么拉起log4j2
在web.xml中添加配置: 下面使用了classpath 参数指定log4j.properties文件的位置,这样log4j的配置文件就不用非要放到src的下面: log4jConfigLocation classpath:config/log4j/log4j.properties 使用spring的监听器,当应用启动时来读取log4j的.
Ⅱ log4j2错误加载XML配置文件问题,怎么解决
将logger中的 additivity 属性配置为 false,则这个logger不会将日志流反馈到root中。 可以达到以logger中配置的appender方式来输出日志而其他地方输出的目的,看配置: root的作用是收集下面所有反馈上来的信息流并根据配置在root中appender进…
Ⅲ log4j2的资源文件具体怎么配置
log4j2和log4j是全局配置的,只能有一个配置文件。 你说的引入另外一个jar,里面的某些方法不想被主工程的log4j2拦截吗? 你可以在Log4j2.xml中,对拦截的包进行单独配置。 如果不能达到需求,建议去log4j2官网文档,十分之详细。
Ⅳ 如何部署和搭建测试log4j 2
Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems inLogback's architecture.Apache Log4j 2是一个Log4j的升级,提供了比他的前身Log4j 1.x更重大的改进,并且它提供了在Logback中可用的许多改进,同时,修复了很多在Logback的结构中的一些内部问题。Log4j 2 APIOverviewThe Log4j 2 API provides the interface that applications should code to and provides the adapter components requiredfor implementers to create a logging implementation. Although Log4j 2 is broken up between an API and an implementation,the primary purpose of doing so was not to allow multiple implementations, although that is certainly possible, but to clearly define what classes and methods are safe to use in "normal" application code.Log4j 2 API提供应用程序可以编写代码的接口并且为实施者提供了创建一个日志实现所需的适配器组件。尽管log4j 2是打破了一个API和一个实现这种关系,这样做的主要目的是不允许多个接口的实现,尽管这当然是可能的,但要清楚的定义类和方法被用在正常的应用程序代码中是安全的。Hello World!No introction would be complete without the customary Hello, World example. Here is ours. First, a Logger with the name "HelloWorld" is obtained from theLogManager.Next, the logger is used to write the "Hello, World!" message, however the message will be written only if the Logger is configured to allow informational messages.没有通俗易懂的hello world例子就不能称为一个完整的介绍。这是我们的(没明白这里什么意思)。首先,一个名为“Hello world”的Logger是从LogManager来获得的。其次,Logger被用来写“hello,world”消息,然而这个消息仅仅是在Logger配置了允许消息记录信息的时候才能打印出来。[java] view plain print?import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class HelloWorld { private static final Logger logger = LogManager.getLogger("HelloWorld"); public static void main(String[] args) { logger.info("Hello, World!"); } } 这里我是在一个空的工程中搭建的该类,首先的问题就是LogManager和Logger这两个类没有,下载了官网上的zip文件,里面有很多的jar包,尝试了一下,log4j-api-2.0.2.jar这个jar包里面是有这两个类的,引入之后运行,发现还需要引入log4j-core-2.0.2.jar这个类,引入这两个类之后发现还是会报错,报错信息如下:[plain] view plain print?ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 该错误的意思应该是没有找到配置文件,使用了默认的配置文件,只有error级别的错误可以在控制台打印,这时往下读文档。The output from the call to logger.info() will vary significantly depending on the configuration used. See theConfiguration sectionfor more details. 调用logger.info()进行输入将会很大程度的依赖配置的使用。更多细节详见配置一章。从这里可以看出,我们需要的配置的内容应该在这个配置章节中,所以跳转到配置章节进行学习。ConfigurationInserting log requests into the application code requires a fair amount of planning and effort. Observation shows that approximately 4 percent of code is dedicated to logging. Consequently, even moderately sized applications will have thousandsof logging statements embedded within their code. Given their number, it becomes imperative to manage these log statements without the need tomodify them manually.将日志请求插入到应用程序代码中需要大量的计划和努力。观察显示,大约4%的代码是致力于logging的。因此,甚至一个适中大小的应用都会有数以千记的logging块嵌入他们的代码中。由于他们的数量,不用手动修改他们变得十分重要了。Configuration of Log4j 2 can be accomplished in 1 of 4 ways:配置log4j 2可以用下面1到4方式来配置:Through a configuration file written in XML, jsON, or YAML.Programmatically, by creating a ConfigurationFactory and Configuration implementation.Programmatically, by calling the APIs exposed in the Configuration interface to add components to the default configuration.Programmatically, by calling methods on the internal Logger class.1.通过写一个XML,JSON或者YAML文件来进行配置2.通过编程的方式,通过创建一个ConfigurationFactory类和Configuration接口实现类来配置。3.通过编程的方式,通过调用暴露在Configuration接口中的API,添加组件到默认的配置中。4.通过编程的方式,通过调用在Logger类内部的方法来实现。This page focuses primarily on configuring Log4j through a configuration file. Information on programmatically configuring Log4j can be found atExtendingLog4j 2.这页主要是通过一个配置文件来配置log4j。通过编程的方式来实现的信息可以在Extending Log4j 2这个链接中找到。这里我只先学习通过XML,JSON或者YAML配置文件来进行配置的方式,通过编程来实现的方式暂时还用不到,所以这里不点击链接进去学习了,以后有需要再去看Automatic ConfigurationLog4j has the ability to automatically configure itself ring initialization. When Log4j starts it will locate all the ConfigurationFactory plugins and arrange then in weighted order from highest to lowest. As delivered, Log4j containstwo ConfigurationFactory implementations, one for JSON and one for XML.Log4j有能力在它初始化期间进行自动配置。当Log4j开始时,它将会部署所有的ConfigurationFactory插件并且按照按照权重进行从高到低的排序。当交付的时候,Log4j包含两个显示ConfigurationFactory接口的实现类,一个对应JSON,一个对应XML。Log4j will inspect the "log4j.configurationFile" system property and, if set, will attempt to load the configuration using theConfigurationFactory that matches the file extension.If no system property is set the JSON ConfigurationFactory will look for log4j2-test.json or log4j2-test.jsn in the classpath.If no such file is found the XML ConfigurationFactory will look for log4j2-test.xml in the classpath.If a test file cannot be located the JSON ConfigurationFactory will look for log4j2.json or log4j2.jsn on the classpath.If a JSON file cannot be located the XML ConfigurationFactory will try to locate log4j2.xml on the classpath.If no configuration file could be located the DefaultConfiguration will be used. This will cause logging output to go to the console.1.Log4j将会检查“log4j.configurationFile”系统属性,如果设置了,就会尝试去加载使用匹配ConfigurationFactory的文件扩展名的配置。2.如果没有设置系统属性,那么JSON ConfigurationFactory将会在类路径中查找 log4j2-test.json or log4j2-test.jsn .3.如果没有这样的文件,那么XML ConfigurationFactory 会在类路径中寻找 log4j2-test.xml .4.如果一个测试文件不能定位,那么JSON ConfigurationFactory 会寻找log4j2.json or log4j2.jsn5.如果一个JSON文件不能定位,那么XMLConfigurationFactory就会在类路径中尝试定位log4j2.xml .6.如果没有定位配置文件,DefaultConfiguration将会启用。这些将会引起日志输出到控制台上。看了上面关于配置的加载顺序,了解了log4j加载的优先级An example application named MyApp that uses log4j can be used to illustrate how this is done.一个使用了log4j的名为MyApp的应用实例可以用于说明这些是怎么工作的。下面是官网上给的例子:[plain] view plain print?import com.foo.Bar; // Import log4j classes. import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; public class MyApp { // Define a static logger variable so that it references the // Logger instance named "MyApp". static final Logger logger = LogManager.getLogger(MyApp.class.getName()); public static void main(String[] args) { // Set up a simple configuration that logs on the console. logger.trace("Entering application."); Bar bar = new Bar(); if (!bar.doIt()) { logger.error("Didn't do it."); } logger.trace("Exiting application."); } } [plain] view plain print?package com.foo; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; public class Bar { static final Logger logger = LogManager.getLogger(Bar.class.getName()); public boolean doIt() { logger.entry(); logger.error("Did it again!"); return logger.exit(false); } } 这里我在自己的工程中也创建同样的类MyApp begins by importing log4j related classes. It then defines a static logger variable with the nameMyApp which happens to be the fully qualified name of the class.导入log4j相关的类,然后用MyApp这个名称定义一个logger静态变量,这个名称是类的完全限定名称。Log4j will provide a default configuration if it cannot locate a configuration file. The default configuration, provided in the DefaultConfiguration class, will set up:A ConsoleAppender attached to the root logger.A PatternLayout set to the pattern "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n" attached to the ConsoleAppenderNote that by default Log4j assigns the root logger to Level.ERROR.如果log4j没有定位到一个配置文件的话,那么它就将会提供一个默认的配置文件。在DefaultConfiguration这个类中提供的默认配置将会建立如下内容:一个ConsoleAppender将会附加到跟日志中一个PatternLayout设置模式"%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n" 附加到ConsoleAppender中。值得注意的是:通过默认Log4j分配的跟日志级别为error。这里是说明默认的情况下显示日志的格式是怎么定义的和日志显示的级别。所以这里我的结果和官网显示基本一致[plain] view plain print?ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 16:16:10.765 [main] ERROR com.foo.Bar – Did it again! 16:16:10.765 [main] ERROR com.foo.MyApp – Didn't do it. 除了一个红色的提醒以外全部一样。As was described previously, Log4j will first attempt to configure itself from configuration files. A configuration equivalent to the default would look like:如前所述,Log4j将会首先尝试从配置文件去配置。默认的配置样式为:[plain] view plain print?<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n"/> </Console> </Appenders> <Loggers> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> Once the file above is placed into the classpath as log4j2.xml you will get results identical to those listed above. Changing the root level to trace will result in results similar to:一旦上面的文件被类路径中的log4j2.xml文件替换,你会得到和上面的列表同样的结果。改变根的等级为trace会返回以下结果。这里也就是说,需要我们的classpath中自己定义一个xml文件,用来配置log4j,然后改变log的级别,就可以显示其他内容了。把上面xml的内容复制到工程中,按照上面说的文件名称部署,确实打印出了两个信息,而且没有了红色的警告了。这时修改log的级别为trace,就把所有的信息打印出来了。[plain] view plain print?17:13:01.540 [main] TRACE MyApp – Entering application. 17:13:01.540 [main] TRACE com.foo.Bar – entry 17:13:01.540 [main] ERROR com.foo.Bar – Did it again! 17:13:01.540 [main] TRACE com.foo.Bar – exit with (false) 17:13:01.540 [main] ERROR MyApp – Didn't do it. 17:13:01.540 [main] TRACE MyApp – Exiting application. 至此,已经能够使用log4j2了,以后有了新的需求再去学习怎么使用,目前先到这里了
Ⅳ log4j2可以在没有配置文件时运行么
log4j2和log4j是全局配置的,只能有一个配置文件。你说的引入另外一个jar,里面的某些方法不想被主工程的log4j2拦截吗?你可以在Log4j2.xml中,对拦截的包进行单独配置。如果不能达到需求,建议去log4j2官网文档,十分之详细。
Ⅵ 如何部署和搭建测试log4j2
部署和搭建测试log4j2的方法如下;
方法一、通过用XML,JSON或YAML编写的配置文件。
方法二:以编程方式,通过创建一个ConfigurationFactory和配置实现。
方法三、以编程方式,通过调用Configuration界面中公开的API将组件添加到默认配置。
方法四、以编程方式,通过调用内部Logger类的方法,步骤如下:
通过写一个XML,JSON或者YAML文件来进行配置2.通过编程的方式;
通过创建一个ConfigurationFactory类和配置接口实现类来配置;
通过编程的方式,通过调用暴露在配置接口中的API,添加组件到默认的配置中;
通过编程的方式,通过调用在记录器类内部的方法来实现。
Ⅶ log4j2.xml怎么调用properties
自动加载配置文件:(1)如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找source folder下的log4j.xml配置文件,若没有,会寻找log4j.properties文件。然后加载配置。配置文件放置位置正确,不用在程序中手动加载log4j配置文件。如果将配置文件放到了config文件夹下,在build Path中设置下就好了。若要手动加载配置文件如下:(1)PropertyConfigurator.configure("log4j.properties") 默认读取的是项目根目录的路径。此时的log4j.properties要放在项目目录下。如图,log4j.properties和src是同级目录,同在根目录下(2)一般,一个java项目会有很多的配置文件,建议把所有的配置文件放到一个文件夹下,例如,放到config文件夹。那么在读取这些配置文件的时候要加上子目录名称。如图在项目目录下创建config文件夹(注意:不是在src文件下),此时,config和src是同级目录这时,读取路径改为:PropertyConfigurator.configure("config/log4j.properties");(3):如果不手动设置,不用人为的写加载log.properties文件的代码时,直接放src目录下,千万要记得,如果新建一个JAVA项目,src文件要弄成原文件包才行我就是用的这个(4)项目打成jar包时,一般不会把配置文件也打进jar包。如果是第一种方式,直接将log4j.properties文件和生成的HelloWorld.jar放在同一目录下,项目就能顺利读取配置文件。如果是第二种方式,要建立config文件夹,把配置文件放入其中,再将config文件和生成的HelloWorld.jar放在同一目录下,项目就能顺利读取配置文件。
Ⅷ 如何配置log4j2日志记录至数据库
一、前提条件 系统必须是使用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文件中的信息,同时存储到数据库
Ⅸ springmvc怎么配置log4j2
增加pom配置,让maven加载log4j包<!– log4j –> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency>修改web.xml,把log4j加到项目中<!– Log4j配置 –> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:/log4j/log4j.xml</param-value> </context-param> <!– 加载log4j配置文件 –> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>根据web.xml配置的路径,在src/main/resource目录下新建log4j/log4j.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %m%n" /> </layout> <!–限制输出级别 –> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMax" value="ERROR" /> <param name="LevelMin" value="DEBUG" /> </filter> </appender> <root> <priority value="debug" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration>经过上面的步骤后,log4j就配置好了,接下来是使用,在DemoController中使用,使用slf4j接口,代替log4j,这样假如以后不用log4j了,用logback等其它日志框架,只需修改配置文件,不需要修改java代码package com.my1.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class DemoController { private static Logger logger = LoggerFactory.getLogger(DemoController.class); @RequestMapping(value = "/toPage1.htm") public ModelAndView toPage1() { logger.debug("TEST"); return new ModelAndView("page1"); }}由于用了springmvc框架,日志配置好后,会输出很多spring日志,在log4j.xml中,增加一段配置,修改spring包的日志输出级别 <!– 通过<category></category>的定义可以将各个包中的类日志输出到不同的日志文件中 –> <category name="org.springframework"> <priority value="error" /> <appender-ref ref="CONSOLE" /> </category>log4j的自定义输出格式说明<!– %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL –> <!– %r 输出自应用启动到输出该log信息耗费的毫秒数 –> <!– %c 输出所属的类目,通常就是所在类的全名 –> <!– %t 输出产生该日志事件的线程名 –> <!– %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” –> <!– %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 –> <!– %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) –>log4j的输出方式说明<!– Log4j提供的appender有以下几种: –> <!– org.apache.log4j.ConsoleAppender(控制台), –> <!– org.apache.log4j.FileAppender(文件), –> <!– org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), –> <!– org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), –> <!– org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) –>
Ⅹ log4j配置之后报错如何解决
步骤:
1、在Maven的porn.xml 文件中添加dependency如下。之后就会添加三个包。