feat: улучшена классификация логов PostgreSQL

- Добавлена поддержка LOG: логов PostgreSQL как INFO уровень (зеленый цвет)
- Добавлена поддержка FATAL: логов PostgreSQL как ERROR уровень (красный цвет)
- Исправлена классификация логов в формате [номер] LOG: и [номер] FATAL:
- Убраны отладочные console.log сообщения
- Обновлены Dockerfile и docker-compose.yml
- Перемещен start.sh в папку app/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-09-01 14:22:25 +03:00
parent c40b2b312e
commit d697797577
4 changed files with 43 additions and 1 deletions

35
app/start.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
# LogBoard+ - Скрипт запуска
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
set -e
# Получаем настройки из переменных окружения
DEBUG_MODE=${DEBUG_MODE:-false}
LOGBOARD_PORT=${LOGBOARD_PORT:-9001}
echo "LogBoard+ Starting..."
echo "Port: $LOGBOARD_PORT"
echo "Debug mode: $DEBUG_MODE"
# Определяем параметры запуска в зависимости от режима отладки
if [ "$DEBUG_MODE" = "true" ]; then
echo "Starting in DEBUG mode with auto-reload and Swagger docs..."
echo "Swagger UI: http://0.0.0.0:$LOGBOARD_PORT/docs"
echo "ReDoc: http://0.0.0.0:$LOGBOARD_PORT/redoc"
exec uvicorn app:app \
--host 0.0.0.0 \
--port $LOGBOARD_PORT \
--reload \
--log-level debug
else
echo "Starting in PRODUCTION mode..."
exec uvicorn app:app \
--host 0.0.0.0 \
--port $LOGBOARD_PORT \
--log-level info
fi

View File

@@ -399,6 +399,21 @@ function classify(line){
return 'err';
}
// FATAL - ищем точное совпадение уровня логирования (раскрашиваем как ERROR)
if (/\s- FATAL -|\s\[fatal\]|level=fatal/.test(l)) {
return 'err';
}
// PostgreSQL FATAL - специальная проверка для FATAL логов PostgreSQL
if (/\[\d+\]\s+FATAL:/i.test(l)) {
return 'err';
}
// Простая проверка для любых строк содержащих "FATAL:"
if (l.includes('fatal:')) {
return 'err';
}
// WARNING - ищем точное совпадение уровня логирования
if (/\s- WARNING -|\s\[warn\]|level=warn/.test(l)) {
return 'warn';
@@ -409,11 +424,37 @@ function classify(line){
return 'ok';
}
// LOG - ищем точное совпадение уровня логирования (раскрашиваем как INFO)
if (/\s- LOG -|\s\[log\]|level=log|^log:/i.test(l)) {
return 'ok';
}
// PostgreSQL LOG - специальная проверка для логов PostgreSQL
if (/\[\d+\]\s+LOG:/i.test(l)) {
return 'ok';
}
// Простая проверка для любых строк содержащих "LOG:"
if (l.includes('log:')) {
return 'ok';
}
// Дополнительные проверки для других форматов (только если не найдены точные совпадения)
if (/\bdebug\b/i.test(l)) return 'dbg';
if (/\berror\b/i.test(l)) return 'err';
if (/\bfatal\b/i.test(l)) {
return 'err'; // FATAL также раскрашиваем как ERROR
}
if (/\bwarning\b/i.test(l)) return 'warn';
if (/\binfo\b/i.test(l)) return 'ok';
if (/\blog\b/i.test(l)) {
return 'ok'; // LOG также раскрашиваем как INFO
}
// Отладка для неклассифицированных логов
if (l.includes('log:') || l.includes('fatal:')) {
console.log('Unclassified LOG/FATAL line:', line);
}
return 'other';
}