2014-02-28 113 views
4

我想在我的Geb框架中获得log4j2安装程序。对于我的生活,我无法弄清楚如何把它放在一起。我有一个log4j2.xml(不是log4j.xml)文件设置与记录器“Selenium”。在DefaultPage中,我尝试从配置文件LogManager.getLogger("Selenium")中获取名为Selenium的Logger。log4j2配置文件未被识别

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="TRACE"> 
    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss,SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    </Appenders> 
    <Loggers> 
     <Logger name="Selenium" level="TRACE"> 
      <AppenderRef ref="Console"/> 
     </Logger> 
    <Root level="TRACE"> 
     <AppenderRef ref="Console"/> 
    </Root> 
    </Loggers> 
</Configuration> 

DefaultPage.groovy

class DefaultPage extends geb.Page { 
    static content = { 
     pageId(wait: true) { $("meta", name: "pageId").getAttribute("content") } 
     pageHeading(wait: true) { $("meta", name: "heading").getAttribute("content") } 
    } 

    static final Logger logger = LogManager.getLogger("Selenium") 

    /** 
    * Uses jquery to create a mouseover on an element 
    * @param element The jquery element created in the page object. 
    */ 
    static def mouseOver(element) { 
     logger.error("Hovering over ${element}") 
     element.jquery.mouseover() 
    } 
} 

测试执行和输出被写入STDERR,这是预期的,因为我有logger.error。但是,它不包含该日期的格式。此外,我还有其他类使用.info调用此记录器,而在STDOUT中没有看到这些类。当我调试记录器的级别是错误,而不是TRACE。

这是我的文件结构:

functional 
| 
--src 
    | 
    |--test 
     | 
     |--groovy 
     |  | 
     |  |--com.x.functional 
     |   | 
     |   |--pages 
     |    | 
     |    |--DefaultPage.groovy 
     |    |--Other classes that want to use log4j2. 
     | 
     |--resources 
      | 
      |--log4j2.xml 

谢谢。

编辑 将log4j更改为log4j2。添加配置状态= TRACE。使用','而不是'。'修改日期格式为毫秒。

+0

[日期模式](http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html)是'%d {HH:mm:ss,SSS}'(注意逗号而不是'.'毫秒) – dmahapatro

回答

3

Log4J2将在类路径中查找名为log4j2.xml的配置文件。如果找不到这个文件,它会尝试几个选择(请参阅配置手册页),但默认情况下不会识别log4j.xml。 (可以告诉log4j2采取一些指定的文件作为配置:http://logging.apache.org/log4j/2.x/faq.html#config_location

如果找不到配置文件,则会安装一个默认配置,将ERROR和更高事件记录到StdErr。

我怀疑这是怎么回事。解决此问题的最简单方法是重命名您的配置文件log4j2.xml并将其放置在类路径中。您可以通过指定<Configuration status="trace">来启用log4j2内部日志记录,以在必要时进一步进行故障排除。

+0

我一定是在读错文档,我以为它说的是log4j.xml。我最初有log4j2.xml,现在又是log4j2.xml。 代替ERROR,但没有运气。我仍然只得到错误输出,这将是默认配置。我也做了日期模式的变化。所以,所有解决的问题仍然存在相同的问题。我创建了一个名称不在log4j2配置中的另一个记录器。硒记录仪和x记录仪的设置相同。所以我们正在默认。 – TIMBERings

+0

你在类路径中是否有log4j-api和log4j-core jar文件?另外,类路径中的log4j2.xml文件是什么?如果上述两个答案都是肯定的,那么在更改为'>'后,您应该已经开始在控制台上看到log4j2内部日志记录(如log4j2.xml配置文件为解析,appenders安装等)。你看到了吗?一旦解决了这个问题,我认为应用程序中的“跟踪”级别日志记录也会起作用。 –