|
|
import logging |
|
|
import sys |
|
|
import os |
|
|
|
|
|
logging.basicConfig( |
|
|
level=logging.INFO, |
|
|
format='%(asctime)s - %(levelname)s - %(message)s', |
|
|
handlers=[ |
|
|
logging.FileHandler("aiexp.log"), |
|
|
logging.StreamHandler(sys.stdout) |
|
|
]) |
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def log_message(message): |
|
|
logger.info(message) |
|
|
print(message, flush=True) |
|
|
sys.stdout.flush() |
|
|
|
|
|
CHUNKS_LOG_FILE = "all_chunks_debug.log" |
|
|
|
|
|
def init_chunks_log(): |
|
|
""" |
|
|
Создает (или перезаписывает) файл лога чанков. |
|
|
Вызывать один раз при старте/перезапуске системы. |
|
|
""" |
|
|
try: |
|
|
with open(CHUNKS_LOG_FILE, 'w', encoding='utf-8') as f: |
|
|
f.write("=== РЕЕСТР ВСЕХ ЧАНКОВ (ОЧИЩЕНО ПРИ ЗАПУСКЕ) ===\n") |
|
|
log_message(f"Файл лога чанков очищен: {CHUNKS_LOG_FILE}") |
|
|
except Exception as e: |
|
|
log_message(f"Ошибка создания лога чанков: {e}") |
|
|
|
|
|
def log_full_chunk_to_file(doc, index, total): |
|
|
""" |
|
|
Записывает полное содержимое чанка в отдельный файл. |
|
|
""" |
|
|
try: |
|
|
doc_id = doc.metadata.get('document_id', 'UNKNOWN') |
|
|
doc_type = doc.metadata.get('type', 'text') |
|
|
|
|
|
|
|
|
header = f"\n{'='*20} CHUNK #{index+1}/{total} [{'TABLE' if doc_type=='table' else 'TEXT'}] {'='*20}\n" |
|
|
meta_info = f"DOC ID: {doc_id}\nMETADATA: {doc.metadata}\n" |
|
|
content_sep = f"{'-'*20} CONTENT START {'-'*20}\n" |
|
|
footer = f"\n{'-'*20} CONTENT END {'-'*20}\n" |
|
|
|
|
|
with open(CHUNKS_LOG_FILE, 'a', encoding='utf-8') as f: |
|
|
f.write(header) |
|
|
f.write(meta_info) |
|
|
f.write(content_sep) |
|
|
f.write(doc.text) |
|
|
f.write(footer) |
|
|
|
|
|
except Exception as e: |
|
|
|
|
|
print(f"Ошибка записи чанка в лог: {e}") |
|
|
|