使用log4j2将数据记录到不同的日志文件中?

时间:2014-12-08 13:00:42

标签: java logging log4j2

我目前正在开发一个应用程序,它将为不同目的生成2个不同的日志文件。由于我是log4j2的新手,我无法实现它。这是我的配置文件(log4j2.xml):

<?xml version="1.0" encoding="UTF-8"?>
  <Configuration status="WARN">
    <Properties>
      <Property name="log-path">C:/Users/460681/Desktop/SourceFiles</Property>
    </Properties>
    <Appenders>
      <Console name="console-log" target="SYSTEM_OUT"> 
        <PatternLayout 
          pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
      </Console> 
      <RollingFile name="info-log" fileName="${log-path}/SplunkOADC.log"
         filePattern="${log-path}/SplunkOADC-%d{yyyy-MM-dd}.log">
         <PatternLayout>
           <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n
           </pattern>
         </PatternLayout>
         <Policies>
           <TimeBasedTriggeringPolicy interval="1"
             modulate="true" />
         </Policies>
         <Filters>
           <ThresholdFilter level="error" onMatch="DENY"   onMismatch="NEUTRAL"/>
           <ThresholdFilter level="trace" onMatch="DENY"   onMismatch="NEUTRAL"/>
           <ThresholdFilter level="info" onMatch="ACCEPT"   onMismatch="DENY"/>
         </Filters>
       </RollingFile>
       <RollingFile name="error-log" fileName="${log-path}/SplunkOADC-error.log"
            filePattern="${log-path}/SplunkOADC-error-%d{yyyy-MM-dd}.log">
         <PatternLayout>
           <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
           </pattern>
         </PatternLayout>
         <Policies>
           <TimeBasedTriggeringPolicy interval="1"
              modulate="true" />
         </Policies>
         <Filters>
           <ThresholdFilter level="error" onMatch="ACCEPT"   onMismatch="DENY"/>
           <ThresholdFilter level="trace" onMatch="DENY"   onMismatch="NEUTRAL"/>
           <ThresholdFilter level="info" onMatch="DENY"   onMismatch="NEUTRAL"/>
         </Filters>
       </RollingFile>
       <RollingFile name="trace-log" fileName="${log-path}/SplunkOADC-trace.log"
          filePattern="${log-path}/SplunkOADC-trace-%d{yyyy-MM-dd}.log">
          <PatternLayout>
            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
            </pattern>
          </PatternLayout>
          <Policies>
            <TimeBasedTriggeringPolicy interval="1"
              modulate="true" />
          </Policies>
          <Filters>
            <ThresholdFilter level="error" onMatch="DENY"   onMismatch="NEUTRAL"/>
            <ThresholdFilter level="trace" onMatch="ACCEPT"   onMismatch="DENY"/>
            <ThresholdFilter level="info" onMatch="DENY"   onMismatch="NEUTRAL"/>
          </Filters>
        </RollingFile>
     </Appenders>
     <Loggers>
       <Root level="debug">
         <AppenderRef ref="info-log" level="info"/>
         <AppenderRef ref="trace-log" level="trace"/>
       </Root>
     </Loggers>
  </Configuration>

我已尝试过滤器,但我不确定它是否是正确的方法。这是我的java方法,它尝试使用log4j2

进行记录
logger.entry("Enter The app");
String report_index_data =
      "select REPORT_MODE, INDEX_ID from TABLE_NAME";
ResultSet rs = db.selectQuery(report_index_data, conn);
while(rs.next()){
 logger.info("report_index_data =" +rs.getString("report_index_data"));
}
logger.exit();

谢谢!

2 个答案:

答案 0 :(得分:1)

为配置添加新的记录器。

    <root level="debug">
        <appender-ref ref="info-log" level="info"/>
    </root>

    <logger name="logger2">
     <AppenderRef ref="trace-log" level="trace"/>
    </logger>

答案 1 :(得分:0)

首先,请注意,如果您的根记录器级别是debug,那么它不会将跟踪级别的日志事件发送到其任何appender;它只会将级别或更高级别的日志事件调试到其附加程序。

其次,您的代码使用logger.entry()logger.exit()。要使这些方法有用,您需要在模式中使用pattern layout和位置模式,例如%location或%method。 (例如[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}.%M - %msg%n)。这将显示您输入/退出的方法的名称。请注意,计算位置信息有一些performance impact