Создание нескольких файлов журнала другого содержания с log4j

Ну, у меня есть некоторый опыт работы с «большими данными» (ну, не такой большой, но не маленький - я работаю в сфере телекоммуникаций, и у меня есть таблица сведений о вызовах, которая часто превышает 200 тыс. Записей). Я могу вам сказать, что при правильной индексации поиски выполняются довольно быстро. Я только что провел тест в таблице со 116803 строками в неиндексированном столбце и получил результат:

Showing rows 0 - 24 (1608 total, Query took 0.0016 seconds)

Теперь, в той же таблице, в индексированном столбце:

Showing rows 0 - 0 (1 total, Query took 0.0008 seconds.)
[116 ] Кроме того, если вы используете соединения (слева, справа, внутри и т. Д.), Они должны быть в индексированных столбцах. Таким образом, sql не должен искать всю объединенную таблицу для каждой строки.

Итак, если у вас есть следующий запрос:

SELECT * FROM table_a INNER JOIN table_b ON column_from_a = column_from_b

убедитесь, что column_from_b проиндексирован, если table_b довольно большой.

Другая вещь (но немного более сложная) - это репликация. Вы можете иметь кластер SQL с, скажем, 3 сервера. Вы можете настроить основные приложения на использование двух из них, а третье зарезервировать для интенсивной работы.

Но лучшее решение - это посмотреть, как вы можете получить свое собственное решение для конкретного типа операций. Нет общего рецепта, который можно было бы реализовать везде.

81
задан 8 April 2009 в 02:31
поделиться

4 ответа

Это должно запустить Вас:

log4j.rootLogger=QuietAppender, LoudAppender, TRACE
# setup A1
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender
log4j.appender.QuietAppender.Threshold=INFO
log4j.appender.QuietAppender.File=quiet.log
...


# setup A2
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender
log4j.appender.LoudAppender.Threshold=DEBUG
log4j.appender.LoudAppender.File=loud.log
...

log4j.logger.com.yourpackage.yourclazz=TRACE
70
ответ дан Eric Darchis 24 November 2019 в 09:41
поделиться

Для основного logfile/appender, настроенного a .Threshold = INFO для ограничения, что на самом деле зарегистрировано appender к ИНФОРМАЦИИ и выше, независимо от того, имеют ли регистраторы ОТЛАДКУ, ТРАССИРОВКА, и т.д., включила.

Что касается ловли ОТЛАДКИ и ничего, выше которого... необходимо было бы, вероятно, записать пользовательский appender.

Однако я рекомендовал бы не делать этого, поскольку это кажется, что сделало бы поиск и устранение неисправностей и анализ довольно трудно:

  1. Если Ваша цель состоит в том, чтобы иметь единственный файл, где можно надеяться диагностировать что-то, то охват данных логов через различные файлы будет раздражающим - если у Вас не будет очень систематизируемой политики входа, Вам, вероятно, будет нужно содержание и от ОТЛАДКИ и от ИНФОРМАЦИИ, чтобы смочь проследить выполнение проблематичного кода эффективно.
  2. Путем тихого входа всех сообщений отладки Вы теряете любое увеличение производительности, Вы обычно входите в производственную систему путем превращения регистрирующегося (путь) вниз.
3
ответ дан matt b 24 November 2019 в 09:41
поделиться

Возможно, что-то вроде этого?

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 <!-- general application log -->
 <appender name="MainLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="server.log" />
  <param name="Threshold" value="INFO" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender> 
 <!-- additional fooSystem logging -->
 <appender name="FooLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="foo.log" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender>
 <!-- foo logging -->
 <logger name="com.example.foo">
  <level value="DEBUG"/>
  <appender-ref ref="FooLogFile"/>
 </logger>
 <!-- default logging -->
 <root>
  <level value="INFO"/>
  <appender-ref ref="MainLogFile"/>
 </root>
</log4j:configuration>

Таким образом, все информационные сообщения записываются в server.log; Напротив, foo.log содержит только сообщения com.example.foo, включая сообщения уровня отладки.

26
ответ дан araqnid 24 November 2019 в 09:41
поделиться

У меня был этот вопрос, но с изюминкой - я пытался записывать разное содержимое в разные файлы. У меня была информация для журнала отладки LowLevel и журнала пользователей HighLevel. Я хотел, чтобы LowLevel работал только с одним файлом, а HighLevel - как с файлом, так и с syslogd.

Мое решение состояло в том, чтобы сконфигурировать 3 приложения, а затем настроить регистрацию следующим образом:

log4j.threshold=ALL
log4j.rootLogger=,LowLogger

log4j.logger.HighLevel=ALL,Syslog,HighLogger
log4j.additivity.HighLevel=false

Часть мне было трудно понять, что в файле 'log4j.logger' может быть несколько добавленных пользователей. Я пытался сделать это по одной строке за раз.

Надеюсь, это поможет кому-нибудь в какой-то момент!

7
ответ дан 24 November 2019 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: