Бот записывает массу информации в лог-файлы. Давайте разберемся как ее можно анализировать и использовать.
Все файлы логов хранятся в папке log. Они делятся на несколько категорий: system.log - в этот файл попадает вся информация о боте, за исключением логов http-сервера. Может использоваться для просмотра цельной картины происходящего в боте. Но анализ может быть затруднен из-за избыточной информации в этом файле. talk.log - этот файл предназначен для хранения только разговоров чата, я постарался отфильтровать отсюда все лишнее. При настройках по умолчанию файлы этого лога создаются за каждый день и хранятся всегда. error.log - очень важный файл, сюда попадает информация из потока ошибок бота. Анализ может затруднить тот факт, что здесь не видно источник ошибки - после какого сообщения она произошла. Для анализа причин необходимо использовать system.log. flood.log - сюда попадают сообщения, которые бот посчитал флудом. Обычно в них нет ничего страшного - это повторы или очень частые сообщения в чате. Но если вы видите большой поток повторяющихся сообщений с нескольких номеров - на это стоит обратить внимание, скорее всего ваш бот подвергся флуд-атаке. Для решения проблемы необходимо выделить уникальные номера из потока сообщений и добавить их в игнор-лист (файл idnore.txt) http.log - содержит информацию о http-запросах к вашей веб-админке. Здесь вы можете увидеть попытки несанкционированного доступа к вашему боту. Но прошу обратить внимание, что эти логи могут содержать важную информацию о паролях и других настройках вашего бота. Не передавайте этот лог просто так незнакомым людям.
Давайте теперь рассмотрим самое важное - лог ошибок. Как правило, при обработки исключения в боте используется конструкция:
view source
print ? 1. try{ 2. // некоторый текст программы 3. }catch (Exception ex){ 4. ex.printStackTrace(); 5. // какое-то сообщение пользователю чата об ошибке 6. }
В результате ошибки происходит запись стека вызовов программы в поток ошибок, а следовательно и в лог-файл. Сообщение обычно выглядит следующим образом:
В начале блока сообщений мы видим собственно ошибку "Table 'mychat.rooms' doesn't exist", а далее идет содержимое стека вызовов. Оно как правило не интересно. Но если причина ошибки вам непонятна - смотрите место вызова, произошедшее непосредственно в боте. Так в данном случае мы видим что ошибка произошла: "at ru.jimbot.modules.chat.RoomWork.fillCash(RoomWork.java:59)" - файл RoomWork.java, строка 59. Это первая строчка, качающаяся исходников непосредственно нашего бота, а не сторонней библиотеки. Что находится в этой строке можно поглядеть в исходных текстах бота. Проанализировав эту информацию часто можно определить причину произошедшей ошибки. В рассмотренном выше случае все понятно из текста ошибки - отсутствует таблица rooms в базе данных.
Что еще нужно знать о логах? Для создания логов используется стандартная и широко распространенная библиотека log4j. Описание ее возможностей вы можете посмотреть на официальном сайте. Начиная с версии 0.4.0 настройки логирования выведены во внешний файл конфигурации: lib\log4j.properties. В нем вы можете настроитьтакие параметры как: размер файлов логов, количество архивных файлов, способ обозначения названий архивных файлов
Все сказанное не под копирайтами исключительно ИМХО искренне Ваш, Inzhener