log4j2 - 在Console&amp ;;中复制日志RollingFile

时间:2017-07-25 15:28:56

标签: log4j2

嘿,我想知道是否可以在控制台中输出与文件输出相同的输出。

这是我的XML配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" name="log4j2 Logs">
    <Properties>
        <Property name="basePath">./logs</Property>
    </Properties>   

  <Appenders>     
    <RollingFile name="file" fileName="${basePath}/ActivateMaintenancePage.logs" 
                             filePattern="${basePath}/ActivateMaintenancePage-%d{yyyy-MM-dd}">
      <PatternLayout header="LOGGING START%n%n" footer="%n%nLOGGING END"
                     pattern="%3sn %30d{DEFAULT}    [%M] %-7level %c{30} - %m%n" />

      <Policies>      
        <OnStartupTriggeringPolicy minSize="0"/>
        <TimeBasedTriggeringPolicy />
        <SizeBasedTriggeringPolicy size="500 MB"/>
      </Policies>
    </RollingFile>


    <Console name="console" target="SYSTEM_OUT">
      <PatternLayout header="LOGGING START%n%n" footer="%n%nLOGGING END"
                     pattern="%3sn %30d{DEFAULT}    [%M] %-7level %c{30} - %m%n" />
    </Console>     
  </Appenders>    


  <Loggers>             
    <Root level="trace">        
        <AppenderRef ref="console" level="error"/>  
        <AppenderRef ref="file" level="trace"/>         
    </Root>
  </Loggers> 
</Configuration>

RollingFile中的输出

  1        2017-07-25 11:16:36,762    [initializeChrome] INFO    class testNG.SimSettings - Web Chrome driver is now initilized.
  2        2017-07-25 11:16:36,762    [lambda$0] INFO    class testNG.SimSettings - Opening... http://msrvaq11vm.technomedia.ca/sigal_60/2017sp1/sp_polymont/_sim/PROD Sp2 2016 Sim...
  3        2017-07-25 11:16:47,926    [initilizeAllElements] INFO    class testNG.SimSettings - All @FindBy elements have been initilized.
  4        2017-07-25 11:16:48,006    [change1stLevelFrame] INFO    class testNG.SimSettings - Changing target to 1st level frame.
  5        2017-07-25 11:16:49,719    [enterCredentials] INFO    class testNG.SimSettings - UserName & Password: Success!

并在控制台中清空。但现在如果我改变

<AppenderRef ref="console" level="error"/>  

到“追踪”

它将是2,4,6 ....在控制台和我的文件中它将是1,3,5,7 ......这很容易理解。

但我的问题是如何在控制台和文件中同时具有相同的日志级别(跟踪)输出? (添加包名称和级别的标记不起作用)

与此问题相关:log4j2 xml configuration - Log to file and console (with different levels)

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确阅读了您的问题,但似乎您希望在日志输出中呈现一些唯一值,以便相同的日志事件在控制台日志和文件中具有相同的唯一值日志输出。

每次呈现日志事件时,序列号模式转换器都会递增。每个Appender都会单独呈现相同的日志事件,因此不同的Appender将永远不会具有相同的序列号。

有很多选择。一个想法是在模式布局中包含%nano nanotime。应用程序进行日志记录调用时将捕获此值,并且对于所有appender将捕获此值。另一种方法是创建自定义Log4j2模式转换器或查找。