2014-12-09 3 views
-2

Привет У меня есть требование записать записи в файлы журналов, поступающие из таблицы в MySQL. Я сделал свое исследование, но не получил удовлетворения от решений, которые я нашел. Я прочитал об использовании уровня журнала в качестве отладки, чтобы проверить, работает ли SQL-запрос правильно или нет.Запись данных в файлы журнала с использованием log4j2?

Но я хочу, чтобы данные регистрировались в конкретном файле журнала, который ничего не регистрирует, а только данные из таблиц sql. Может ли кто-нибудь помочь?

Вот код, который я написал как POC. Это моя классная часть.

private static final Logger logger = LogManager.getLogger(LogDemo.class.getName()); 
private static final Marker QUERY_MARKER = MarkerManager.getMarker("SQL"); 

public static void main(final String... args) { 

// Set up a simple configuration that logs on the console. 
    logger.info("Ankush Bhan created this"); 
    logger.error("THIS IS TRACE"); 


} 

И это моя конфигурация log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Properties> 
    <Property name="log-path">C:/Users/712054/Desktop/Source</Property> 
    </Properties> 
    <Appenders> 
    <RollingFile name="info" fileName="${log-path}/info.log" 
       filePattern="${log-path}/myexample-%d{yyyy-MM-dd}-%i.log"> 
       <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> 
       <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/> 
     <PatternLayout> 
     <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern> 
     </PatternLayout> 
     <Policies> 
     <SizeBasedTriggeringPolicy size="1 MB"/> 
     </Policies> 
     <DefaultRolloverStrategy max="4"/> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 

    <Root level="info" > 
     <AppenderRef ref="info"/> 
    </Root> 
    </Loggers> 
</Configuration> 

Когда я запускаю это, как заявления становятся напечатаны. Но я хочу только часть log.info ??

+0

Пытались ли вы что-нибудь еще? – Raptor

+0

Я пробовал использовать простой log.info для входа в файлы журнала, а в файле конфигурации я помещал фильтры, чтобы просто зарегистрировать информацию. Но есть ли другой способ, который мы можем сделать? –

+0

Кажется, что простое решение для чтения из таблицы mysql с использованием jdbc и ведения журнала с помощью log4j2 должно работать. Log4j2 можно настроить для записи журналов в отдельный файл для этого класса/регистратора. Любые осложнения? –

ответ

0

Итак, я, наконец, решил проблему, используя только фильтры. Вот класс java, который печатает какое-либо сообщение в файле журнала. И в другом файле журнала я добавляю сообщения трассировки. Это файл конфигурации, который я редактировал.

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="DEBUG"> 
    <Properties> 
    <Property name="log-path">C:/Users/712054/Desktop/Source</Property> 
    </Properties> 
    <Appenders> 
    <RollingFile name="info" fileName="${log-path}/info.log" 
       filePattern="${log-path}/myexample-%d{yyyy-MM-dd}-%i.log"> 
     <Filters> 
      <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> 
     </Filters> 
     <PatternLayout> 
     <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy size="1"/> 
     </Policies> 

    </RollingFile> 
    <RollingFile name="trace" fileName="${log-path}/trace.log" 
       filePattern="${log-path}/myexample-%d{yyyy-MM-dd}-%i.log"> 
     <Filters> 
      <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/> 

      <ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/> 
     </Filters> 
     <PatternLayout> 
     <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern> 
     </PatternLayout> 
     <Policies> 
     <TimeBasedTriggeringPolicy size="1"/> 
     </Policies> 

    </RollingFile> 
    </Appenders> 
    <Loggers> 

    <Root level="all" > 
     <AppenderRef ref="info"/> 
     <AppenderRef ref="trace"/> 
    </Root> 
    </Loggers> 
</Configuration> 

И соответствующий класс Java является

public class LogDemo { 

    private static final Logger logger = LogManager.getLogger(LogDemo.class.getName()); 


    public static void main(final String... args) { 
    logger.entry(); //this goes in the trace log file 
    // Set up a simple configuration that logs on the console. 
     logger.info("This goes only in the info log file"); 
     logger.trace("This goes only in the trace log file"); 
     logger.exit(); //this goes in the trace log file 


    }