Предупреждение в System.out, когда ошибка регистрируется в пользовательском файле журнала - PullRequest
1 голос
/ 07 сентября 2010

в настоящее время мы запускаем довольно много приложений на нашем сервере WebSphere Portal, и у большинства из них есть свой собственный файл журнала, поэтому System.out не будет слишком перегружен.Однако, как только в приложении возникает ошибка, ее легко пропустить.Если ошибки регистрируются, я хотел бы получить предупреждение в System.out с уведомлением, чтобы взглянуть на соответствующий файл журнала.Сейчас я сделал это, поместив log4j logger в класс с равными методами для logger-class, и он просто делегирует все вызовы в logger.только когда вызываются методы error и fatal-messages, файл для входа извлекается из регистратора, и предупреждение записывается в System.out.Это работает нормально, за исключением того, что теперь LoggerWrapper является вызывающей стороной для методов logger, и, таким образом, записывается в файлы журнала как вызывающая сторона, а не как исходная вызывающая сторона.даже с совершенно другим подходом?Я хотел бы избежать переписывания всех обработчиков исключений, чтобы добавить сообщение в System.out самостоятельно.

Christian

Ответы [ 3 ]

2 голосов
/ 07 сентября 2010

Вы можете просто настроить приложение Log4J для записи в стандартный вывод (или, вернее, в этом случае stderr). Это стандартный способ. Установив порог журнала в ПРЕДУПРЕЖДЕНИЕ, вы можете отфильтровать большую часть сообщений журнала.

Цена заключается в том, что сообщения об ошибках будут появляться как в stderr, так и в файлах журналов, однако для меня это не будет проблемой. Фактически, это может помочь найти конкретные журналы, соответствующие данному сообщению stderr.

0 голосов
/ 14 сентября 2010

Спасибо за идеи.После внутреннего обсуждения я закончил тем, что написал простой appender, который прикреплен ко всем регистраторам и который выдает короткое уведомление System.out, когда регистрируется сообщение об ошибке или фатальное сообщение.Поскольку у аппендера есть доступ к регистратору звонков, он может анализировать всех других аппендеров, узнавать, куда они входят, и добавлять это к уведомлению.

0 голосов
/ 11 сентября 2010

Я делаю очень похожую вещь в нашем приложении, в котором я администрирую все журналы.

Я решил проблему, подключив «ErrorConsoleAppender» к моему корневому логгеру. Все регистраторы в моем файле конфигурации являются аддитивными (разумеется, это означает, что они «всплывают» соответствующим образом).

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

...
    <appender name="ErrorConsoleAppender" class="org.apache.log4j.ConsoleAppender">
            <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/> 
            <layout class="org.apache.log4j.PatternLayout">
                  <param name="ConversionPattern" value="[%d{ABSOLUTE}] %-5p > %m%n" />
            </layout>
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                  <param name="LevelMin" value="ERROR" />
                  <param name="LevelMax" value="ERROR" />
                  <param name="AcceptOnMatch" value="true" />
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>
...
    <root>
            <priority value="ALL" />
            <appender-ref ref="ErrorConsoleAppender" />
    </root>

Конечно, чтобы сделать это так, как вы описали, вам нужно было бы добавить простые вызовы log.error (String), которые не сбрасывают следы стека, как предложено выше Питером.


Если редактирование вызовов log.error (String) нецелесообразно, я бы предложил использовать AspectJ для перекрестной обработки кода и предоставления необходимых вам функций. Даже если вы не знакомы с аспектно-ориентированным программированием, довольно просто добиться того, что вы описали в нем. Фактически, один из основных вариантов использования AOP - это именно тот сценарий, который вы описали. Аспекты отлично подходят для регистрации.

На первый взгляд, наиболее подходящим подходом, в вашем случае, было бы использование синтаксиса «after throwing» для выполнения соответствующих действий регистрации при возникновении определенных исключений.

Я надеюсь, что все это поможет, дайте мне знать, если у вас есть дополнительные вопросы о том, как АОП может решить вашу проблему,

-gMale

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