Журналы не выводятся в консоль WildFly.

Вопрос или проблема

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

package com.company.web.action;

import org.apache.struts2.action.ServletRequestAware;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.company.client.AAAClient;
import com.company.model.Operator;

public class LoginAction implements ServletRequestAware{
    private String userName;
    private String password;
    private String flag;
    private HttpServletRequest request;
    private static final Logger log = Logger.getLogger(LoginAction.class.getName());
    // Геттеры и сеттеры для свойств формы
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getFlag() {
        return flag;
    }

    public void setFlag(String flag) {
        this.flag = flag;
    }

    // Инъекция HttpServletRequest
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    // Метод действия Struts 2
    public String login() {
        
        log.info("Имя пользователя: " + userName + ", Пароль: " + password);

        log.info("инициация входа");
        
        AAAClient aaa = new AAAClient();
        boolean result = aaa.auth(userName, password);

        if (result) {
            // Аутентификация успешна
            log.info("Пользователь вошел в систему. id -> " + userName);
            Operator op = aaa.getOperator(userName);
            HttpSession session = request.getSession();
            session.setAttribute("AAAFlag", op);
            session.setAttribute("CurrentUser", op);

            if ("pos".equals(flag)) {
                return "pos_success";
            }
            return "success";
        } else {
            // Аутентификация не удалась
            log.info("Вход пользователя не удался. id -> " + userName);
            return "failure";
        }
    }
    
    public String logout() {
        // Аннулирование сессии
        if (request != null) {
            request.getSession().invalidate();
        }
        return "logout";
    }

    @Override
    public void withServletRequest(HttpServletRequest arg0) {
        
        this.request = arg0;
        
    }

}

Вот часть моего кода Struts, обрабатывающего вход:

<action name="login" class="com.company.web.action.LoginAction" method="login">
        <result name="input">/login.jsp</result>
        <result name="failure">/login.jsp</result>
        <result name="success">/Statistics.do?reqCode=dashboard</result>
        <result name="pos_success">/POS.do?reqCode=display</result>
    </action>

И, что самое важное, часть моего standalone.xml, где я установил все логи на DEBUG, но по-прежнему не вижу строки, которые я хотел бы журналировать:

 <subsystem xmlns="urn:jboss:domain:logging:8.0">
    <console-handler name="CONSOLE">
        <level name="DEBUG"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
        <target name="System.out"/>
    </console-handler>
    <periodic-rotating-file-handler name="FILE" autoflush="true">
        <formatter>
            <named-formatter name="PATTERN"/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="server.log"/>
        <suffix value=".yyyy-MM-dd"/>
        <append value="true"/>
    </periodic-rotating-file-handler>
    <logger category="stdout">
        <level name="DEBUG"/>
        <handlers>
            <handler name="CONSOLE"/>
        </handlers>
    </logger>
    <logger category="com.company">
        <level name="DEBUG"/>
    </logger>
    <root-logger>
        <level name="DEBUG"/>
        <handlers>
            <handler name="CONSOLE"/>
            <handler name="FILE"/>
        </handlers>
    </root-logger>
    <formatter name="PATTERN">
        <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
    <formatter name="COLOR-PATTERN">
        <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
</subsystem>

Единственное, что я получаю из отладки, это моя попытка авторизации:

### НАЧАЛО генерации /janasi-web-service/login.do ############################
    # Параметры  : password(TestPassword), reqCode(login), userName(TestName),
    # Атрибуты сессии :
    #################################################################

Я пытался использовать slf4j и jboss logger, но результат идентичен. Также пытался использовать System.out.print вместо логов, но ничего не отображалось, даже несмотря на то, что у меня есть логгер с категорией stdout. Пожалуйста, помогите мне, я долго пытался, но теперь я застрял

Ответ или решение

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

Теория

WildFly использует модульную архитектуру для управления логированием, в основе которого лежит JBoss Logging. Система логирования обычно настроена через файл standalone.xml, где можно указать нужный уровень логирования и обработчики (handlers), которые будут обрабатывать и отображать логи.

Есть несколько причин, по которым логи не выводятся в консоль:

  1. Некорректная конфигурация логирования: Модули и обработчики должны быть правильно настроены. Отсутствие связи между логгером и обработчиком может стать причиной отсуствия логов в консоли.

  2. Ошибки в коде приложения: Код может не достигать точек логирования из-за ошибок в логике приложения или условий.

  3. Ошибки в конфигурации среды: Иногда конфигурации среды, такие как переменные окружения, могут препятствовать нормальной работе логирования.

Пример

Давайте подробнее рассмотрим ваш файл standalone.xml. В нем заданы разные уровни логирования и обработчики, такие как CONSOLE и FILE. Особое внимание стоит обратить на категорию логгера и задействованные обработчики:

<logger category="com.company">
    <level name="DEBUG"/>
</logger>

В данном случае, вы настраиваете уровень DEBUG для категории com.company, но недостаточно просто установить уровень логирования. Нужно обеспечить, чтобы данный логгер использовал обработчики, которые выводят информацию в консоль или файл.

Применение

Для решения проблемы, предлагаю следующий план действий:

  1. Проверьте настройки обработчиков: Убедитесь, что ваш логгер для com.company подключен к CONSOLE-обработчику. В текущей конфигурации нет явного указания на обработчик для этой категории. Добавьте явное задание обработчика в секции <logger>:

    <logger category="com.company">
        <level name="DEBUG"/>
        <handlers>
            <handler name="CONSOLE"/>
        </handlers>
    </logger>
  2. Убедитесь в правильности конфигурации корневого логгера: Корневой логгер уже настроен для использования CONSOLE и FILE. Этим вы удостоверяетесь, что все логи через root-логгер должны отображаться в консоли. Также проверьте, что в разделе <formatter> логического вывода добавлено:

    <formatter name="COLOR-PATTERN">
        <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
  3. Проверьте исходный код: В вашей Java программе все классы и методы, которые осуществляют логирование, должны использовать правильный логгер с уровнем DEBUG. Проверьте, достигается ли метод login() в вашем коде:

    log.info("login init");

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

  4. Используйте отладочные сообщения: Вместо log.info, временно измените на log.fine и убедитесь, что в конфигурации логгера учитываются более низкие уровни логирования такие как FINE.

  5. Задействуйте System.out.printf: Хотя, как вы упомянули "System.out.print" не помог, повторю проверку этого способа. Возможно, настройте System.out или отлов исключений на стороне сервера, чтобы удостовериться в прохождении выполнения до ожидаемых точек.

  6. Перезагрузите сервер: После внесения изменений в конфигурацию, убедитесь, что сервер был перезапущен для применения изменений.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...