Wildfly 18 добавляет шаблон ведения журнала сервера перед регистраторами log4j

Я настроил свой сервер WildFly 18 в формате доменного режима, и мы используем регистратор log4j. Когда я проверил файл server.log, все журналы из log4j регистрируются после собственного формата регистратора wildfly. Как и в приведенной ниже строке, 1-я дата и уровень журнала взяты из журналов сервера, а следующий формат даты и уровень журнала, а сообщение журнала исходит от log4j.

2021-03-19 00:13:06,623 INFO  2021-03-19 00:13:06,601 INFO  [com.app.connection.service] CurrentThreadID=436 On

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

У меня есть следующая конфигурация в domain.xml

          <subsystem xmlns="urn:jboss:domain:logging:8.0">
                <custom-handler name="CUSTOM-FILE" class="org.jboss.logmanager.handlers.PeriodicSizeRotatingFileHandler" module="org.jboss.logmanager">
                    <formatter>
                        <named-formatter name="MY-PATTERN"/>
                    </formatter>
                    <properties>
                        <property name="maxBackupIndex" value="24"/>
                        <property name="rotateSize" value="10000000"/>
                        <property name="suffix" value=".yyyy-MM-dd-HH"/>
                        <property name="append" value="true"/>
                        <property name="fileName" value="${jboss.server.log.dir}/server.log"/>
                    </properties>
                </custom-handler>
                <logger category="com.arjuna">
                    <level name="WARN"/>
                </logger>
                <logger category="io.jaegertracing.Configuration">
                    <level name="WARN"/>
                </logger>
                <logger category="org.jboss.as.config">
                    <level name="DEBUG"/>
                </logger>
                <logger category="sun.rmi">
                    <level name="WARN"/>
                </logger>
                <root-logger>
                    <level name="INFO"/>
                    <handlers>
                        <handler name="CUSTOM-FILE"/>
                    </handlers>
                </root-logger>
                <formatter name="PATTERN">
                    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
                <formatter name="MY-PATTERN">
                    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
                <formatter name="COLOR-PATTERN">
                    <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p %s%e%n"/>
                </formatter>
            </subsystem>

В log4j.xml у меня есть приложение консоли, как показано ниже, и этот log4j.xml присутствует внутри каталога модулей по пути wildfly18.0.1\modules\org\apache\logging\log4j\main\log4j2-props

<Console name="Console">
    <PatternLayout pattern="%d %-5p [%c] %m\n" />
</Console>

Следующие вещи, которые я пробовал:

  1. Добавлены теги внутри подсистемы логирования

    <add-logging-api-dependencies value="false"/>
    <use-deployment-logging-config value="false"/>
    
  2. Добавлены регистраторы

 <logger category="stdout" use-parent-handlers="false">
        <level name="INFO"/>
        <handlers>
             <handler name="CUSTOM-FILE"/>
         </handlers>
  </logger>
  1. Исключенные подсистемы и модули из развертываний. Добавлено следующее в META-INF\jboss-deployment-structure.xml

Мы используем файл развертывания EAR

<deployment>
        <exclude-subsystems>
           <subsystem name="logging"/>
        </exclude-subsystems>
        <exclusions>
            <module name="org.apache.commons.logging"/>
            <module name="org.apache.log4j"/>
            <module name="org.jboss.logging"/>
            <module name="org.jboss.logging.jul-to-slf4j-stub"/>
            <module name="org.jboss.logmanager"/>
            <module name="org.jboss.logmanager.log4j"/>
            <module name="org.slf4j"/>
            <module name="org.slf4j.impl"/>
        </exclusions>
    </deployment>

Итак, пожалуйста, может ли кто-нибудь помочь мне с правильной конфигурацией для настройки режима домена?

Заранее спасибо...


person Pmestry    schedule 19.03.2021    source источник
comment
Вы используете log4j или log4j2?   -  person James R. Perkins    schedule 19.03.2021
comment
Мы используем log4j2. Из-за этой проблемы мы не можем настроить сервер WildFly в рабочей среде. Наш производственный выпуск остановлен.....Это критично....   -  person Pmestry    schedule 21.03.2021


Ответы (2)


Я не уверен, что это вариант, но WildFly 22 поддерживает log4j2, поэтому вы можете настроить ведение журнала с помощью WildFly и не нужно включать log4j2.xml.

Похоже, вы хотите перенаправить stdout в файл. Если вы хотите, чтобы ваша конфигурация log4j2 управляла форматом, вам нужно изменить формат для вашего файла MY-FORMATTER. Ниже приведены некоторые команды CLI для настройки сервера.

# Add the pattern for the stdout logger
/subsystem=logging/pattern-formatter=MY-PATTERN:add(pattern="%s%n")
# Create a file to direct stdout to
/subsystem=logging/periodic-size-rotating-file-handler=CUSTOM-FILE:add(named-formatter=MY-PATTERN, max-backup-index=24, rotate-size="10m", suffix=".yyyy-MM-dd-HH", append=true, file={relative-to=jboss.server.log.dir, path=server-stdout.log})
# Create the stdout logger, direct it to the file only
/subsystem=logging/logger=stdout:add(handlers=[CUSTOM-FILE], use-parent-handlers=false)

Обратите внимание, что я переименовал файл журнала в server-stdout.log, чтобы не переопределять значение по умолчанию server.log. Причина этого в том, что сам сервер будет вести журнал в этот файл, и если вы переопределите его с помощью этого шаблона, журналы с самого сервера не будут отформатированы.

Также обратите внимание, что все, что записывается в System.out, также попадает в server-stout.log.

person James R. Perkins    schedule 22.03.2021
comment
Спасибо за ответ ... Но у нас есть требование записывать все в сам файл server.log, поскольку мы используем этот файл в нашем приложении для получения всех журналов сервера. - person Pmestry; 23.03.2021
comment
Есть ли способ добавить обработчик консоли в domain.xml, используя следующие команды конфигурации и перенаправив регистраторы консоли в файл server.log, потому что я устал использовать этот обработчик консоли, но журналы log4j2 исчезли из моего файла server.log /subsystem=logging/console-handler=JUST-PRINT:add(formatter="%s%E%n") /subsystem=logging/logger=stderr:add(use-parent-handlers="false", handlers=[JUST-PRINT]) /subsystem=logging/logger=stdout:add(use-parent-handlers="false", handlers=[JUST-PRINT]) - person Pmestry; 23.03.2021
comment
Это будет печатать сообщения от самого WildFly только с сообщением. Невозможно заставить WildFly регистрироваться в конфигурации log4j2. Один из вариантов: вы можете использовать search.maven.org/artifact/org.jboss.logmanager/, который WildFly 22+ использует для записи сообщений log4j2 в jboss-logmanager. - person James R. Perkins; 23.03.2021

Как написано во многих других комментариях, Jboss добавляет свой собственный шаблон и обрабатывает шаблон приложения log4j2.xml как сообщение для своего собственного шаблона. Чтобы решить эту проблему, добавьте следующее в подсистему ведения журнала вашего Jboss Standalone.xml.

   <subsystem xmlns="urn:jboss:domain:logging:8.0">
    ....
    <console-handler name="stdout-console" autoflush="true">
        <level name="ALL"/>
        <formatter>
            <pattern-formatter pattern="%s%n"/>
        </formatter>
    </console-handler>
    <logger category="stdout" use-parent-handlers="false">
        <handlers>
            <handler name="stdout-console"/>
        </handlers>
    </logger>
    ....
   </subsystem>

Это приведет к тому, что шаблон журнала Jboss по умолчанию будет перезаписан, и в вашем журнале будет то, что вы настроили в приложении консоли log4j2.xml.

person Nilesh Kumar    schedule 11.06.2021