предисловие
Только лысая голова может стать сильнее.
Текст был включен в мой репозиторий GitHub, добро пожаловать, звезда:GitHub.com/Zhongf UC очень…
Помните, что я писал раньше:После прочтения "Руководства по разработке Java для Alibaba", т.к. с "логированием" при самообучении раньше особо не контактировал, поэтому "протокол логирования" в "Руководстве" отложил.
И я написал один ранее:В чем разница между проектами, которые вы делаете в компании, и проектами, которые вы делаете в школе?Упоминается в: проекты компании не будут иметьe.printStackTrace();
наличие такого кода. Потому что это выводит сообщение об ошибкени даты, ни оценкиПодождите, неудобно анализировать.
Ходить на сервер для проверки логов на работе — очень и очень распространенная операция, поэтому в начале я написал еще одну статью.Обычно используемые команды Linux на работеЯ расскажу о команде Linux, которая проверяет журнал внутри.
Я подумал, что, поскольку я некоторое время был в контакте с журналом, я мог бы также оглянуться назад в «Руководство», чтобы увидеть, на что обратить внимание, поэтому у меня есть эта заметка.
1. Основы логирования в Java
Когда я учился сам, я писал только следующий код для устранения неполадок:
try {
// doSomething
} catch (Exception e) {
e.printStackTrace();
}
----------
// 查看某个数据的值时:
System.out.println(xxxx);
Когда я пришел в компанию, я обнаружил, что приведенный выше код исчез, а остальное было:
LOGGER.info("begin to run Java3y:{}", id);
----
LOGGER.error("excepiton occurs when run Java3y {}, exception{}", id, e.toString());
При использованииe.printStackTrace();
Если да, то неудобно анализировать информацию, напечатанную в контроле:
И делим информацию накласс и времяОн записывается на диск сервера, в случае возникновения проблемы можно найти соответствующий лог по соответствующей информации (это очень удобно проверить):
Давайте посмотрим, как выглядит общий журнал:
Например: Сейчас кто-то приходит сообщить, что пользователь XX, похоже, не может получать текстовые сообщения, дайтеВремя отправки и идентификатор пользователя, статус отправки пользователя в нашей системе мы можем узнать по логу (например: state:81 на картинке, мы считаем это статусом успешной отправки)
Итак, вот вопрос, мыгде войти? На самом деле инструкция уже дала ответ:
Внимательно зарегистрируйтесь. Подавить вывод журнала отладки в производственной среде; опционально выводить информационный журнал; если включено
Используйте предупреждение для записи информации о бизнес-поведении, когда оно просто находится в сети,Обязательно обратите внимание на объем вывода журнала и избегайте установки диска сервера
лопаться, и не забудьте вовремя удалить эти журналы наблюдений.
Выводится большое количество недействительных журналов, что не способствует повышению производительности системы и быстрому обнаружению точек ошибок. При регистрации подумайте о:Эти
Кто-нибудь действительно видит лог? Что вы можете сделать, когда увидите этот журнал? Может ли это быть полезно для устранения неполадок?
1.1 Что такое РБИ?
Наиболее распространенный способ регистрации — распечаткаИнформация о выполнении программы, который используется для быстрого обнаружения и устранения неполадок. Это то, что я понял сначала, но на самом деле это можно расширить.
В системе, над которой я сейчас работаю, мы также используем журналы на канале выполнения системы.РБИ. Например, я хочу отправить сообщение уведомления сейчас, и сообщение уведомления на самом деле выглядит следующим образом:
Процесс происходит примерно так:
- Во-первых, другие вызывают интерфейс, предоставленный моим RPC (или я вызываю свой собственный интерфейс), и обнаруживают, что это сообщение уведомления. Поэтому я собрал соответствующий Task и асинхронно поместил его в очередь сообщений.
- Другая система берет задачу из очереди сообщений, обрабатывает задачу (например, блокировать ли ее ночью, принудительно ли отправлять и т. д.), а затем вызывает интерфейс HTTP для доставки задачи нижестоящему
- На самом деле есть много вещей, которые нужно сделать ниже по течению.Вся ссылка очень длинная(Например, для вызова библиотеки SDK Android и IOS выполняют разную обработку)
И мы надеемся, что сможем подсчитать некоторую статистику после завершения пуша.показатель(показы, рейтинг кликов, коэффициент конверсии) и так далее. Поэтому необходимо сделать бревно в некоторых ключевых позициях (профессиональная точка называетсяРБИ)
После открытия всей ссылки этиточка(журналы) собираются и очищаются/фильтруются на потоковой платформе в реальном времени (storm/flink). Если это необходимо в режиме реального времени, поместите его в Redis и поместите в Hive в автономном режиме.
2. Технические характеристики руководства
2.1 Структура ведения журнала с использованием режима фасада
[Обязательно] API в системе логирования (Log4j, Logback) нельзя использовать напрямую в приложении, но следует полагаться на использование фреймворка логирования
API в SLF4J, используяПлатформа регистрации шаблонов фасадов, что облегчает техническое обслуживание иЕдиная обработка журналов.
Фасадный режим Я также написал заметку ранее:Три минуты, чтобы изучить режим фасада!
На самом деле это надеждаСлой API абстрагирован, что не требует масштабных изменений при переключении конкретных фреймворков логирования..
Это мы можем понять, когда изучаем JDBC:
Независимо от того, подключаюсь ли я к MySQL, Oracle или SQL Server, мой интерфейс всегда один и тот же, и мне не нужно менять свой Java API при переключении баз данных.
Посмотрел проект компании, используяSLF4J+Logback
2.2 Вызов интерфейса RPC и использование класса Throwable для перехвата
[Обязательно] Throwable должен использоваться для перехвата исключений при вызове RPC, сторонних пакетов или связанных методов динамически генерируемых классов.
класс для перехвата.
Когда я раньше исследовал проблему, была проблема, в которой не могли разобраться, и модуль catch не был включен в отладку. Позже мой старший сказал: «Как насчет того, чтобы попробовать изменить его на Throwable?
try {
} catch (Throwable e) {
}
Я был очень подозрительным и сказал: «Зачем переходить на Throwable? Разве мы не можем использовать Exception для перехвата всех исключений? Exception является подклассом Throwable, но Exception уже содержит все исключения Java».
Как мы все знаем, у Throwable есть два подкласса:
- Ошибка (обычно мы игнорируем это... в нормальных условиях программа Error не запускается)
- Exception
The Throwable class is the superclass of all errors and exceptions in the Java language
Вышеуказанные правила также разъясняются в «Руководстве»:
Описание: метод вызывается через механизм отражения, если метод не найден, генерируется исключение NoSuchMethodException. что бросит
Как насчет NoSuchMethodError?Когда двухсторонние пакеты конфликтуют друг с другом, механизм арбитража может привести к появлению неожиданных версий и сделать сигнатуры методов классов несовпадающими.
конфигурации или когда инфраструктура модификации байт-кода (например, ASM) динамически создает или изменяет класс, соответствующая сигнатура метода изменяется.. эти случаи, а именно
Делает время компиляции кода правильным, но когда код запускается, выдаетNoSuchMethodError.
Общее значение таково: при вызове связанных методов RPC, стороннего пакета или динамически сгенерированного класса ошибка может быть вызвана напрямую, а перехват исключения невозможен.
Студенты, которые хотят увидеть пример, могут прочитать эту статью:
Наконец
Ссылки (адрес загрузки руководства по разработке Alibaba):
Хорошие статьи, которые я нашел, когда искал данные:
рад вывестигалантерейные товарыОбщедоступный номер технологии Java:Java3y. В публичном аккаунтеБолее 200 оригинальных статейТехнические статьи, обширные видеоресурсы, красивые карты мозга,Следуйте, чтобы получить его!
Я думаю, что моя статья хорошо написана, нажмитеотличный!