•system.log - в этот файл попадает вся информация о боте, за исключением логов http-сервера. Может использоваться для просмотра цельной картины происходящего в боте. Но анализ может быть затруднен из-за избыточной информации в этом файле.
•talk.log - этот файл предназначен для хранения только разговоров чата, я постарался отфильтровать отсюда все лишнее. При настройках по умолчанию файлы этого лога создаются за каждый день и хранятся всегда.
•error.log - очень важный файл, сюда попадает информация из потока ошибок бота. Анализ может затруднить тот факт, что здесь не видно источник ошибки - после какого сообщения она произошла. Для анализа причин необходимо использовать system.log.
•flood.log - сюда попадают сообщения, которые бот посчитал флудом. Обычно в них нет ничего страшного - это повторы или очень частые сообщения в чате. Но если вы видите большой поток повторяющихся сообщений с нескольких номеров - на это стоит обратить внимание, скорее всего ваш бот подвергся флуд-атаке. Для решения проблемы необходимо выделить уникальные номера из потока сообщений и добавить их в игнор-лист (файл idnore.txt). Сделать это можно разными способами. Лично я предпочитаю парсить логи с помощью Excel, а потом выделять уникальные номера Access.
•http.log - содержит информацию о http-запросах к вашей веб-админке. Здесь вы можете увидеть попытки несанкционированного доступа к вашему боту. Но прошу обратить внимание, что эти логи могут содержать важную информацию о паролях и других настройках вашего бота. Не передавайте этот лог просто так незнакомым людям.
Давайте теперь рассмотрим самое важное - лог ошибок. Как правило, при обработки исключения в боте используется конструкция:
view sourceprint?1.try{
2.
// некоторый текст программы
3.}catch (Exception ex){
4.
ex.printStackTrace();
5.
// какое-то сообщение пользователю чата об ошибке
6.}
В результате ошибки происходит запись стека вызовов программы в поток ошибок, а следовательно и в лог-файл. Сообщение обычно выглядит следующим образом:
view sourceprint?01.08.02.2009 18:45:50 [ERROR] - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'mychat.rooms' doesn't exist
02.08.02.2009 18:45:50 [ERROR] -
03.08.02.2009 18:45:50 [ERROR] - at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
04.08.02.2009 18:45:50 [ERROR] -
05.08.02.2009 18:45:50 [ERROR] - at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
06.08.02.2009 18:45:50 [ERROR] -
07.08.02.2009 18:45:50 [ERROR] - at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
08.08.02.2009 18:45:50 [ERROR] -
09.08.02.2009 18:45:50 [ERROR] - at java.lang.reflect.Constructor.newInstance(Unknown Source)
10.08.02.2009 18:45:50 [ERROR] -
11.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
12.08.02.2009 18:45:50 [ERROR] -
13.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.Util.getInstance(Util.java:381)
14.08.02.2009 18:45:50 [ERROR] -
15.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
16.08.02.2009 18:45:50 [ERROR] -
17.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
18.08.02.2009 18:45:50 [ERROR] -
19.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
20.08.02.2009 18:45:50 [ERROR] -
21.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
22.08.02.2009 18:45:50 [ERROR] -
23.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
24.08.02.2009 18:45:50 [ERROR] -
25.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
26.08.02.2009 18:45:50 [ERROR] -
27.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
28.08.02.2009 18:45:50 [ERROR] -
29.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2466)
30.08.02.2009 18:45:50 [ERROR] -
31.08.02.2009 18:45:50 [ERROR] - at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1383)
32.08.02.2009 18:45:50 [ERROR] -
33.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.chat.RoomWork.fillCash(RoomWork.java:59)
34.08.02.2009 18:45:50 [ERROR] -
35.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.chat.UserWork.<init>(UserWork.java:84)
36.08.02.2009 18:45:50 [ERROR] -
37.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.chat.ChatServer.start(ChatServer.java:71)
38.08.02.2009 18:45:50 [ERROR] -
39.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.Manager.start(Manager.java:196)
40.08.02.2009 18:45:50 [ERROR] -
41.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.http.MainPage.srvs_start(MainPage.java:261)
42.08.02.2009 18:45:50 [ERROR] -
43.08.02.2009 18:45:50 [ERROR] - at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
44.08.02.2009 18:45:50 [ERROR] -
45.08.02.2009 18:45:50 [ERROR] - at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
46.08.02.2009 18:45:50 [ERROR] -
47.08.02.2009 18:45:50 [ERROR] - at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
48.08.02.2009 18:45:50 [ERROR] -
49.08.02.2009 18:45:50 [ERROR] - at java.lang.reflect.Method.invoke(Unknown Source)
50.08.02.2009 18:45:50 [ERROR] -
51.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.http.MainPage.doGetOrPost(MainPage.java:742)
52.08.02.2009 18:45:50 [ERROR] -
53.08.02.2009 18:45:50 [ERROR] - at ru.jimbot.modules.http.MainPage.doGet(MainPage.java:718)
54.08.02.2009 18:45:50 [ERROR] -
55.08.02.2009 18:45:50 [ERROR] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
56.08.02.2009 18:45:50 [ERROR] -
57.08.02.2009 18:45:50 [ERROR] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
58.08.02.2009 18:45:50 [ERROR] -
59.08.02.2009 18:45:50 [ERROR] - at org.garret.httpserver.JHttpSession.session(JHttpSession.java:154)
60.08.02.2009 18:45:50 [ERROR] -
61.08.02.2009 18:45:50 [ERROR] - at org.garret.httpserver.JHttpSession.run(JHttpSession.java:64)
В начале блока сообщений мы видим собственно ошибку "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. В нем вы можете настроитьтакие параметры как: размер файлов логов, количество архивных файлов, способ обозначения названий архивных файлов.
Источник: оффициальный сайт JimBot'а