为什么我尝试使用log4j时会出现此错误?

时间:2015-02-24 16:19:35

标签: java logging log4j

我在 log4j 中是绝对新的,我有以下问题。

进入名为 Mailer 的类我以这种方式声明了我的log4j Logger 对象:

private static final org.apache.log4j.Logger logger = Logger.getLogger(Mailer.class);

然后我将一个日志记录放入类构造函数中(以测试记录器是否正常工作),这样:

public Mailer() {
    super();
    logger.debug("LOGGER IN ACTION !!! INTO Mailer CONSTRUCTOR !!!");
    setTimeoper();
}

问题是,当进入类construcor时,记录器似乎不能正常工作并且不打印我的消息,而是我获取此记录器错误(进入控制台):

log4j:WARN No appenders could be found for logger (utility.Mailer).
log4j:WARN Please initialize the log4j system properly.

在我的项目中,我有一个 config 包,其中包含 log4j.properties 文件,该文件具有简洁内容,可显示 DEBUG log4j statment进入控制台:

定义控制台appender

log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender

# now define the layout for the appender
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# now map our console appender as a root logger, means all log messages will go to this appender
log4j.rootLogger = DEBUG, consoleAppender

我认为这是正确的但我从未指明log4j必须这样做(我不知道我该怎么做以及我必须做什么)

我错过了什么?如何解决此问题并正确配置log4j?

TNX

1 个答案:

答案 0 :(得分:2)

log4j documentation状态

  

确切的默认初始化算法定义如下:

     
      
  1. 将log4j.defaultInitOverride系统属性设置为任何其他值,然后" false"将导致log4j跳过默认初始化   程序(本程序)。
  2.   
  3. 将资源字符串变量设置为log4j.configuration系统属性的值。指定的首选方法   默认初始化文件是通过log4j.configuration系统实现的   属性。 如果系统属性log4j.configuration不是   define,然后将字符串变量资源设置为其默认值   " log4j.properties"
  4.   
  5. 尝试将资源变量转换为URL。
  6.   
  7. 如果资源变量无法转换为URL,例如由于MalformedURLException,则从中搜索资源   classpath通过调用   org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)   返回一个URL。注意字符串" log4j.properties"   构成格式错误的网址。
  8.   
  9. 如果找不到URL,则中止默认初始化。 否则,请从网址配置log4j。
  10.   

由于您尚未指定此类属性,因此log4j将在类路径的根目录中查找log4j.properties。您的属性文件位于config,因此log4j无法找到它。移动它或提供系统属性及其位置。