Nano Hash - криптовалюты, майнинг, программирование

Поддержание нескольких конфигураций log4j.xml для нескольких веб-приложений

В настоящее время у нас есть несколько (10+) веб-приложений в Tomcat, каждое из которых должно иметь свою собственную конфигурацию log4j.xml, потому что

  • каждое веб-приложение имеет другое имя файла для DailyRollingFileAppender
  • часто бывает 2-3 приложения (журнал информации/ошибок, аудит, статистика)
  • кроме того, могут иметь уникальные определения уровня регистратора, чтобы уменьшить некоторые болтливые компоненты.

Растущая проблема заключается в том, что разные стороны, которые используют ведение журнала, хотят использовать разные форматы, правила и уровни ведения журнала:

  • разработчики хотят вести журнал TRACE для всего, тестировщики хотят вести журнал INFO, системные администраторы (для производственных развертываний и т. д.) хотят только уровень ERROR.
  • как разработчики, так и тестировщики довольны DailyRollingFileAppender, в то время как системные администраторы хотят вместо этого использовать logrotate
  • системные администраторы хотят заархивировать журналы, что неудобно для разработчиков и тестировщиков.

Таким образом, наиболее очевидным решением является, конечно, иметь log4j.xml в 3 вариантах (log4j.xml.dev, log4j.xml.test, log4j.xml.prod) для каждого веб-приложения и каким-то образом повторно развернуть соответствующий. Который выглядит как кошмар для обслуживания или даже настройки.

Другой вариант - иметь какое-то место за пределами веб-приложений, где будет 1 файл log4j.xml для всех веб-приложений, который настраивается один раз для этой среды и не развертывается каждый раз повторно. Кажется, лучше, но большой файл log4j.xml может запутаться, и я не нашел никаких рекомендаций относительно того, является ли это вообще хорошим подходом или куда следует поместить log4j.xml в таком случае.

Итак, если у кого-то была подобная дилемма, как вы ее решили? если вы использовали один из подходов выше, или если у вас есть идея для совершенно другого подхода - я хотел бы услышать это. Спасибо.

09.09.2015

Ответы:


1

Вам может быть интересно или стоит взглянуть на Logstash:

https://www.elastic.co/guide/en/logstash/current/config-examples.html

09.09.2015
  • Спасибо. Кажется, это в основном для мониторинга/обработки существующих журналов, но я не вижу, как это может помочь в настройке журналов. Не могли бы вы быть немного более конкретным (извините, если я спрашиваю что-то очевидное, я никогда не использовал Logstash)? 09.09.2015

  • 2

    Для других постеров с тем же вопросом я опубликую здесь ответ, который не идеален, но дает частичное решение, по крайней мере, для нас.

    • Перейдите на log4j 2. Это обеспечивает лучший контроль над тем, как вы вращаете журналы, и позволяет застегивать их.
    • Создайте 2 конфигурации log4j: одну для отладки и одну для производства. Мы используем Maven для сборок и выпусков, поэтому профиль Maven определяет, какая модель log4j будет добавлена ​​в веб-приложение: профиль сборки подберет отладочную/расширенную конфигурацию, а выпуск подберет сокращенную производственную конфигурацию:

      <profiles>
      <profile>
          <id>logDebug</id>
          <activation>
              <property>
                  <name>!release</name>
              </property>
          </activation>
          <properties>
              <log4j.xml>log4jDebug.xml</log4j.xml>
          </properties>
      </profile>
      <profile>
          <id>logRelease</id>
          <activation>
              <property>
                  <name>release</name>
                  <value>true</value>
              </property>
          </activation>
          <properties>
              <log4j.xml>log4jRelease.xml</log4j.xml>
          </properties>
      </profile>
      

    And then:

    <build>   
      ...  
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
          <executions>
            <execution>
              <phase>prepare-package</phase>
              <goals>
                <goal>run</goal>
              </goals>
              <configuration>
                <tasks>
                  <echo message="Use log4j configuration file ${log4j.xml}" />
                  <copy tofile="${project.build.directory}/classes/log4j.xml" overwrite="true">
                    <fileset dir="src/main/resources/">
                      <include name="${log4j.xml}" />
                    </fileset>
                  </copy>
                </tasks>
              </configuration>
            </execution>
            ...
    
    29.09.2015
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..