log4j2配置文件无法识别

时间:2014-02-28 23:36:48

标签: logging groovy log4j log4j2 geb

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

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中看不到。当我调试记录器的级别是ERROR,而不是TRACE。

这是我的文件结构:

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

谢谢。

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

2 个答案:

答案 0 :(得分: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内部日志记录,以便在必要时进一步进行故障排除。

答案 1 :(得分:1)

老问题,但如果有人继续寻找解决方法,我会回答。

正如TIMBERings所说,建议将文件放在Resources文件夹中。如果要使用eclipse,则需要将Resources文件夹添加到Java Build Path的源中。

无需指定$Script:UserClosed = $false while($Script:UserClosed -ne $true){ [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") Function Pick-Date { $Cal = New-Object System.Windows.Forms.MonthCalendar $Cal.ShowWeekNumbers = $true $Cal.MaxSelectionCount = 1 $Cal.Dock = 'Fill' $Form = New-Object Windows.Forms.Form $Form.text = "Colocar fecha que desea enviar. Y presiona Enter" $Form.Size = New-Object Drawing.Size @(656,620) $btnSelect = New-Object System.Windows.Forms.Button $btnSelect.Size = "100,100" $btnSelect.add_Click({ $Form.close() }) $btnSelect.Location = New-Object System.Drawing.Point(530,480) $btnSelect.Text="ENTER" $Form.Controls.Add($btnSelect ) $Form.AcceptButton = $btnSelect $Form.Controls.Add($Cal) $Form.Add_Shown({$Form.Activate()}) $Form.Add_FormClosing({ param( $sender,$e) If($e.CloseReason -eq 'UserClosing'){$Script:UserClosed = $true} }) [void]$Form.ShowDialog() return (Get-Date($Cal.SelectionStart)) } $fecha = Pick-Date } <Configuration status="trace">就足够了。

您可以输入“。”或ss和SSS <Configuration>之间的“,”(只是格式化)。

致谢。