Как через терминал найти нужные исключения в логах?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Поиск исключений в логах через терминал
Поиск нужных исключений — критический навык для отладки production-проблем. Рассмотрю основные подходы.
1. Базовый поиск через grep
Самый простой способ — использовать grep:
# Поиск всех исключений
grep -i "exception\|error\|traceback" app.log
# Поиск конкретного типа исключения
grep "ValueError" app.log
# Игнорируя регистр
grep -i "connectionerror" app.log
# Вывод строк до и после совпадения
grep -B 5 -A 10 "TimeoutError" app.log
2. Рег-выражения для более точного поиска
Для сложных паттернов используй grep -E (extended regex):
# Поиск исключений с номером строки
grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}.*Error" app.log
# Поиск исключений между двумя временами
grep "2024-03-22 14:" app.log | grep "Exception"
# Исключения в определённом модуле
grep "myapp.handlers.*Error" app.log
3. Использование awk и sed
awk мощнее для структурированной обработки:
# Вывод только сообщений об ошибках
awk "/Error|Exception/ {print NR\": \"$0}" app.log
# Подсчёт типов исключений
awk -F\"Exception\" "/Exception/ {print \"$2\" | \"sort | uniq -c\"}" app.log
# Вывод исключений с метаданными
awk "/Traceback/ {found=1} found {print} /^$/ {found=0}" app.log
4. Фильтрация по временным диапазонам
Для больших логов ограничивай диапазон:
# Логи за последний час
grep "2024-03-22 15:" app.log | grep "Error"
# Используя sed для выбора строк с N по M
sed -n 1000,2000p app.log | grep "Exception"
# Используя tail/head для последних ошибок
tail -1000 app.log | grep "Error"
5. Группировка и статистика
Используй sort и uniq для анализа частоты:
# Количество каждого типа исключения
grep "Exception\|Error" app.log | sed \"s/.*\\([A-Za-z]*Error\\).*/\\1/\" | sort | uniq -c | sort -rn
# Топ исключений
grep -oE \"(Error|Exception)[A-Za-z]*\" app.log | sort | uniq -c | sort -rn | head -10
# Количество ошибок в часу
grep "Error" app.log | cut -d: -f1-2 | uniq -c
6. Поиск с контекстом стека
Для трейсбэков (многострочные ошибки):
# Поиск полного стека вызовов
grep -B 2 -A 20 \"Traceback\" app.log
# Поиск файла и номера строки
grep \"File \\\".*\\\", line" app.log
# Самая частая строка в трейсбэке
grep -A 5 \"Traceback\" app.log | grep \"File\" | cut -d\"\" -f2 | sort | uniq -c | sort -rn
7. Практические примеры
# Найти все ошибки за сегодня в production логе
grep "$(date +%Y-%m-%d)" production.log | grep -E \"ERROR|CRITICAL\"
# Поиск исключений определённого класса
grep \"Django\" app.log | grep -E \"(DatabaseError|PermissionDenied)\"
# Исключения в Celery тасках
grep \"celery\" app.log | grep \"Exception\" | tail -20
# Количество уникальных ошибок
grep -oE \"[A-Za-z]*Error: .*\" app.log | cut -d: -f1 | sort -u | wc -l
8. Продвинутый поиск с jq (для JSON логов)
Если логи в JSON формате:
# Фильтр по уровню
jq \"select(.level==\\\"ERROR\\\") | .message\" app.log
# Поиск по типу исключения
jq \"select(.exception | test(\\\"ValueError\\\")) | .\" app.log
# Статистика по типам
jq -r \".exception\" app.log | grep -v null | sort | uniq -c | sort -rn
Лучшие практики
1. Структурированное логирование — логируй в JSON с полями (timestamp, level, module, exception_type)
2. Ограничивай контекст — используй временные диапазоны и фильтры
3. Сохраняй результаты — редирект в файл: grep "Error" app.log > errors.txt
4. Используй инструменты — tail -f для live просмотра, less для навигации
5. Комбинируй команды — пайпы мощнее одной команды
Инструменты для больших логов
Для production логов (гигабайты) рассмотри:
- ripgrep (
rg) — быстрее grep в 10 раз - lnav — интерактивный просмотр логов
- Splunk/ELK — профессиональные решения
- tail -f +
grep— для live мониторинга
Помни: правильная стратегия поиска экономит часы отладки!