`

怎样去掉警告 log4j:WARN No appenders could be found for logger

阅读更多
资料参考:http://www.java1995.cn/blog/item/144
LOG4J配置全接触
http://xace.iteye.com/blog/729036
应用程序在运行的时候打印出了如下警告信息:
log4j:WARN No appenders could be found for logger
log4j:WARN Please initialize the log4j system properly.

原因:程序中使用了log4j日志处理模块,但在程序运行环境中没有设置 log4j.properties 文件,log4j 就会报上述警告了。

解决方法:

1 在应用程序运行路径下加上log4j.properties 文件.
2 应用程序的开始之处,利用如下语句直接去掉日志:
System.setProperty( "org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog" );
重新运行程序,发现上述那两行 log4j 的警告已经没有了。

原由:为什么我在src没有放置log4j.properties文件呢,因程序中需要为日志输出到一个文件,得这个文件的位置是应用服务器下,所以不能是log4j.properties中硬编码设置日志文件生成的位置,要在程序中动态设置.
如下代码:
日志文件名称:log4jConfig.properties

log4j.rootLogger=INFO,logfile
# DailyRollingFileAppender:每天产生一个日志文件
# Threshold=WARN:指定日志消息的输出最低层次。
# ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
# File=mylog.txt:指定消息输出到mylog.txt文件。
# Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
# DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分
# %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
# %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
# %r: 输出自应用启动到输出该log信息耗费的毫秒数
# %c: 输出日志信息所属的类目,通常就是所在类的全名
# %t: 输出产生该日志事件的线程名
# %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
# %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
# %%: 输出一个"%"字符
# %F: 输出日志消息产生时所在的文件名称
# %L: 输出代码中的行号
# %m: 输出代码中指定的消息,产生的日志具体信息
# %n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=/WEB-INF/logs/log4j.log
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.logfile.ImmediateFlush=true
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold=DEBUG
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]- %m%n

log4j.logger.com.myuser=ERROR
# DWR日志配置
log4j.logger.uk.ltd.getahead.dwr = ERROR


代码如下:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.PropertyConfigurator;

public class Log4jInit extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	
	public Log4jInit() {
	}

	public void init(ServletConfig config) throws ServletException {			
		String prefix = config.getServletContext().getRealPath("/");			
		String file = config.getInitParameter("log4jConfig");
		String filePath = prefix + file;
		Properties props = new Properties();
		try {
			FileInputStream istream = new FileInputStream(filePath);
			props.load(istream);
			istream.close();			
			String logFile = prefix	+ props.getProperty("log4j.appender.logfile.File");// 设置路径
			Out.println("\n日志文件位置: "+logFile);			
			props.setProperty("log4j.appender.logfile.File", logFile);
			PropertyConfigurator.configure(props);// 装入log4j配置信息
		} catch (IOException e) {
			toPrint("Could not read configuration file [" + filePath + "].");
			toPrint("Ignoring configuration file [" + filePath + "].");
			return;
		}
	}

	public static void toPrint(String content) {
		System.out.println(content);
	}
}


web.xml中配置如下:

<servlet>
         <servlet-name>log4j-init</servlet-name>
         <servlet-class>com.log4j.Log4jInit</servlet-class>
         <init-param>
           <param-name>log4jConfig</param-name>
           <param-value>/WEB-INF/classes/log4jConfig.properties</param-value>
         </init-param>
         <load-on-startup>0</load-on-startup>
  </servlet> 


要最后消除警告还要在web容器启动时加入上面那句话才行,OK

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;

public class SrvStartListener extends HttpServlet implements
		ServletContextListener {
	
	private static final long serialVersionUID = 1L;


	public void contextInitialized(ServletContextEvent sce) {
		System.setProperty( "org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog" );		
	}

	
	public void contextDestroyed(ServletContextEvent sev) {		
		
	}

}


web.xml配置如下
<listener>
<listener-class>com.SrvStartListener</listener-class>
</listener>

通过实际运用,发现只能监控处理web请求的路径,对调用DAO层的代码无能为力,唯有spring aop代理来实现。




分享到:
评论

相关推荐

    log4j:WARN No appenders could be found for logger (org.springframework.context.s

    NULL 博文链接:https://wait7758521.iteye.com/blog/1933964

    log4j日志报错解决办法

    首先,错误信息"log4j:WARN No appenders could be found for logger"表明Log4j找不到任何日志输出的目标,也就是没有设置日志appender。日志appender是Log4j用来定义日志输出目的地的组件,比如控制台、文件、邮件...

    log4j.properties

    1.log4j:WARNNoappenderscouldbefoundforlogger(org.apache.hadoop.util.Shell). 2.log4j:WARNPleaseinitializethelog4jsystemproperly. 3.log4j:WARNSeehttp://logging.apache.org/log4j/1.2/faq....

    JAVACCC.DLL

    log4j:WARN No appenders could be found for logger org apache commons beanutils ConvertUtils 出现这个错误 在web inf classes路径下加了log4j properties文件还是这个错误log4j:WARN Please initialize the ...

    quartz log4j

    log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog). log4j:WARN Please initialize the log4j system properly.

    log4j-appenders

    1. 引入依赖:在项目的pom.xml或build.gradle文件中,添加log4j的相关依赖,包括log4j核心库和log4j的异步日志库(如log4j2-async-appender)。 2. 配置日志属性:在log4j.properties或log4j.xml配置文件中,声明...

    log4j-1.2.14.jar

    报错WARN No appenders could be found for logger 或 WARN Please initialize the log4j system properly时需要引入的包。用法可以参考https://blog.csdn.net/u010912188/article/details/79761894

    schemacrawler-hive:适用于Apache Hive的SchemaCrawler插件

    模式爬虫配置单元 不幸的是,到目前为止, 似乎是不切实际的。 从hive-1.1.0(CDH5.4)开始,...log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils). log4j:WARN Please initialize the

    clj-hbase:小型且不完整的 hbase 0.98.3 clojure 包装器

    clj-hbase 这是一个用于 hbase 0.98.3 的小型且仍然不完整的 clojure 包装器 用法 假设我们有一个带有列族“byte-data...log4j:WARN No appenders could be found for logger ( org.apache.hadoop.metrics2.lib.Mutabl

    hadoop-2.6.0-hadoop.dll-winutils.exe

    log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See ...

    log4j简单配置

    例如,在Spring框架的应用中,如果没有正确配置log4j,就可能出现“log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext)”这类警告信息。...

    hanging-chad:演示两个ZK客户可以一次认为自己是领导者

    玩具应用程序可证明参加动物园管理员领导者选举食谱的多个客户可以随时认为自己是领导者。 建造 建立: $ ../gradlew jar 这将在build / libs中创建...log4j:WARN No appenders could be found for logger (org

    struts2驱动包

    log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). log4j:WARN Please initialize the log4j system properly. 2009-8-29 14:02:12 org.apache.catalina.core....

    Java记录文档

    当出现"log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader)"这样的警告时,这意味着log4j没有找到任何日志输出目标。这通常是因为日志配置文件未被正确加载。解决...

    tomcat排错经典案例之404.docx

    log4j:WARN No appenders could be found for logger (org.apache.mons.digester.Digester). log4j:WARN Please initialize the log4j system properly. 2009-11-06 21:39:17 org.apache.catalina.core....

Global site tag (gtag.js) - Google Analytics