diff --git a/poetry.lock b/poetry.lock
index cdb1ffd1a..c2a290db4 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -3047,13 +3047,13 @@ server = ["fastapi (>=0.100.0)", "pydantic-settings (>=2.0.1)", "sse-starlette (
[[package]]
name = "loguru"
-version = "0.7.0"
+version = "0.7.1"
description = "Python logging made (stupidly) simple"
optional = false
python-versions = ">=3.5"
files = [
- {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"},
- {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"},
+ {file = "loguru-0.7.1-py3-none-any.whl", hash = "sha256:046bf970cb3cad77a28d607cbf042ac25a407db987a1e801c7f7e692469982f9"},
+ {file = "loguru-0.7.1.tar.gz", hash = "sha256:7ba2a7d81b79a412b0ded69bd921e012335e80fd39937a633570f273a343579e"},
]
[package.dependencies]
@@ -3061,7 +3061,7 @@ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
[package.extras]
-dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"]
+dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "pre-commit (==3.3.1)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"]
[[package]]
name = "lxml"
@@ -7784,4 +7784,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.9,<3.11"
-content-hash = "a3a506d483c2db7169a9790090095d1764aa5be223d135c6fc3fc2768dfef36c"
+content-hash = "6523f2e35458c6d0b8d281e20dd2233180128805ea07199c073224b0d6f75ee7"
diff --git a/pyproject.toml b/pyproject.toml
index 796145886..077a0cb39 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -84,6 +84,7 @@ python-jose = "^3.3.0"
metaphor-python = "^0.1.11"
markupsafe = "^2.1.3"
pywin32 = { version = "^306", markers = "sys_platform == 'win32'" }
+loguru = "^0.7.1"
[tool.poetry.group.dev.dependencies]
black = "^23.1.0"
diff --git a/src/backend/langflow/api/v1/callback.py b/src/backend/langflow/api/v1/callback.py
index 69dbf5082..2a16a0bd2 100644
--- a/src/backend/langflow/api/v1/callback.py
+++ b/src/backend/langflow/api/v1/callback.py
@@ -10,7 +10,7 @@ from fastapi import WebSocket
from langchain.schema import AgentAction, LLMResult, AgentFinish
-from langflow.utils.logger import logger
+from loguru import logger
# https://github.com/hwchase17/chat-langchain/blob/master/callback.py
diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py
index 2c276c75d..2b3426915 100644
--- a/src/backend/langflow/api/v1/chat.py
+++ b/src/backend/langflow/api/v1/chat.py
@@ -13,8 +13,9 @@ from langflow.api.v1.schemas import BuildStatus, BuiltResponse, InitResponse, St
from langflow.graph.graph.base import Graph
from langflow.services.auth.utils import get_current_active_user, get_current_user
+from langflow.services.utils import get_session
+from loguru import logger
from langflow.services.utils import get_chat_manager, get_session
-from langflow.utils.logger import logger
from cachetools import LRUCache
from sqlmodel import Session
from langflow.services.chat.manager import ChatManager
diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py
index 05477a859..d1f898105 100644
--- a/src/backend/langflow/api/v1/endpoints.py
+++ b/src/backend/langflow/api/v1/endpoints.py
@@ -7,7 +7,7 @@ from langflow.services.database.models.flow import Flow
from langflow.processing.process import process_graph_cached, process_tweaks
from langflow.services.database.models.user.user import User
from langflow.services.utils import get_settings_manager
-from langflow.utils.logger import logger
+from loguru import logger
from fastapi import APIRouter, Depends, HTTPException, UploadFile, Body, status
import sqlalchemy as sa
from langflow.interface.custom.custom_component import CustomComponent
diff --git a/src/backend/langflow/api/v1/validate.py b/src/backend/langflow/api/v1/validate.py
index 64ef60549..457db5bd3 100644
--- a/src/backend/langflow/api/v1/validate.py
+++ b/src/backend/langflow/api/v1/validate.py
@@ -8,7 +8,7 @@ from langflow.api.v1.base import (
validate_prompt,
)
from langflow.template.field.base import TemplateField
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.validate import validate_code
# build router
diff --git a/src/backend/langflow/graph/edge/base.py b/src/backend/langflow/graph/edge/base.py
index dc7eab328..2df20cbde 100644
--- a/src/backend/langflow/graph/edge/base.py
+++ b/src/backend/langflow/graph/edge/base.py
@@ -1,4 +1,4 @@
-from langflow.utils.logger import logger
+from loguru import logger
from typing import TYPE_CHECKING
if TYPE_CHECKING:
diff --git a/src/backend/langflow/graph/graph/base.py b/src/backend/langflow/graph/graph/base.py
index 2b22d352c..94964e472 100644
--- a/src/backend/langflow/graph/graph/base.py
+++ b/src/backend/langflow/graph/graph/base.py
@@ -10,7 +10,7 @@ from langflow.graph.vertex.types import (
)
from langflow.interface.tools.constants import FILE_TOOLS
from langflow.utils import payload
-from langflow.utils.logger import logger
+from loguru import logger
from langchain.chains.base import Chain
diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py
index d5c4beed9..0f9a5e8a9 100644
--- a/src/backend/langflow/graph/vertex/base.py
+++ b/src/backend/langflow/graph/vertex/base.py
@@ -3,7 +3,7 @@ from langflow.graph.utils import UnbuiltObject
from langflow.interface.initialize import loading
from langflow.interface.listing import lazy_load_dict
from langflow.utils.constants import DIRECT_TYPES
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import sync_to_async
diff --git a/src/backend/langflow/interface/agents/base.py b/src/backend/langflow/interface/agents/base.py
index ec8c42aba..574264e47 100644
--- a/src/backend/langflow/interface/agents/base.py
+++ b/src/backend/langflow/interface/agents/base.py
@@ -8,7 +8,7 @@ from langflow.interface.base import LangChainTypeCreator
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.agents import AgentFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class, build_template_from_method
diff --git a/src/backend/langflow/interface/base.py b/src/backend/langflow/interface/base.py
index d1ed83b5a..b006a3174 100644
--- a/src/backend/langflow/interface/base.py
+++ b/src/backend/langflow/interface/base.py
@@ -8,7 +8,7 @@ from pydantic import BaseModel
from langflow.template.field.base import TemplateField
from langflow.template.frontend_node.base import FrontendNode
from langflow.template.template.base import Template
-from langflow.utils.logger import logger
+from loguru import logger
# Assuming necessary imports for Field, Template, and FrontendNode classes
diff --git a/src/backend/langflow/interface/chains/base.py b/src/backend/langflow/interface/chains/base.py
index b906dbd25..755ac82dd 100644
--- a/src/backend/langflow/interface/chains/base.py
+++ b/src/backend/langflow/interface/chains/base.py
@@ -6,7 +6,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.chains import ChainFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class, build_template_from_method
from langchain import chains
from langchain_experimental.sql import SQLDatabaseChain # type: ignore
diff --git a/src/backend/langflow/interface/custom/base.py b/src/backend/langflow/interface/custom/base.py
index 06e874fa7..45a3ea215 100644
--- a/src/backend/langflow/interface/custom/base.py
+++ b/src/backend/langflow/interface/custom/base.py
@@ -8,7 +8,7 @@ from langflow.interface.custom.custom_component import CustomComponent
from langflow.template.frontend_node.custom_components import (
CustomComponentFrontendNode,
)
-from langflow.utils.logger import logger
+from loguru import logger
# Assuming necessary imports for Field, Template, and FrontendNode classes
diff --git a/src/backend/langflow/interface/custom/directory_reader.py b/src/backend/langflow/interface/custom/directory_reader.py
index 44b2d4f1b..01b11a4a6 100644
--- a/src/backend/langflow/interface/custom/directory_reader.py
+++ b/src/backend/langflow/interface/custom/directory_reader.py
@@ -1,7 +1,7 @@
import os
import ast
import zlib
-from langflow.utils.logger import logger
+from loguru import logger
class CustomComponentPathValueError(ValueError):
diff --git a/src/backend/langflow/interface/document_loaders/base.py b/src/backend/langflow/interface/document_loaders/base.py
index db0832ff3..a2c147e16 100644
--- a/src/backend/langflow/interface/document_loaders/base.py
+++ b/src/backend/langflow/interface/document_loaders/base.py
@@ -5,7 +5,7 @@ from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.documentloaders import DocumentLoaderFrontNode
from langflow.interface.custom_lists import documentloaders_type_to_cls_dict
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/embeddings/base.py b/src/backend/langflow/interface/embeddings/base.py
index 169985d37..1063d10d1 100644
--- a/src/backend/langflow/interface/embeddings/base.py
+++ b/src/backend/langflow/interface/embeddings/base.py
@@ -6,7 +6,7 @@ from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.base import FrontendNode
from langflow.template.frontend_node.embeddings import EmbeddingFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/initialize/loading.py b/src/backend/langflow/interface/initialize/loading.py
index 589d4b3ff..b600fb5b2 100644
--- a/src/backend/langflow/interface/initialize/loading.py
+++ b/src/backend/langflow/interface/initialize/loading.py
@@ -34,7 +34,7 @@ from langflow.utils import validate
from langchain.chains.base import Chain
from langchain.vectorstores.base import VectorStore
from langchain.document_loaders.base import BaseLoader
-from langflow.utils.logger import logger
+from loguru import logger
if TYPE_CHECKING:
from langflow import CustomComponent
diff --git a/src/backend/langflow/interface/llms/base.py b/src/backend/langflow/interface/llms/base.py
index f562b99ed..87e4937cf 100644
--- a/src/backend/langflow/interface/llms/base.py
+++ b/src/backend/langflow/interface/llms/base.py
@@ -5,7 +5,7 @@ from langflow.interface.custom_lists import llm_type_to_cls_dict
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.llms import LLMFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/memories/base.py b/src/backend/langflow/interface/memories/base.py
index 70665602c..61c6cc430 100644
--- a/src/backend/langflow/interface/memories/base.py
+++ b/src/backend/langflow/interface/memories/base.py
@@ -6,7 +6,7 @@ from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.base import FrontendNode
from langflow.template.frontend_node.memories import MemoryFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class, build_template_from_method
from langflow.custom.customs import get_custom_nodes
diff --git a/src/backend/langflow/interface/output_parsers/base.py b/src/backend/langflow/interface/output_parsers/base.py
index 256b521e1..b6eb36a0e 100644
--- a/src/backend/langflow/interface/output_parsers/base.py
+++ b/src/backend/langflow/interface/output_parsers/base.py
@@ -7,7 +7,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.output_parsers import OutputParserFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class, build_template_from_method
diff --git a/src/backend/langflow/interface/prompts/base.py b/src/backend/langflow/interface/prompts/base.py
index 5aa41dfb2..70818429e 100644
--- a/src/backend/langflow/interface/prompts/base.py
+++ b/src/backend/langflow/interface/prompts/base.py
@@ -8,7 +8,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.prompts import PromptFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/retrievers/base.py b/src/backend/langflow/interface/retrievers/base.py
index db1cfd165..92e3f2f61 100644
--- a/src/backend/langflow/interface/retrievers/base.py
+++ b/src/backend/langflow/interface/retrievers/base.py
@@ -7,7 +7,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.retrievers import RetrieverFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_method, build_template_from_class
diff --git a/src/backend/langflow/interface/run.py b/src/backend/langflow/interface/run.py
index 42cea0e98..9d3d95cda 100644
--- a/src/backend/langflow/interface/run.py
+++ b/src/backend/langflow/interface/run.py
@@ -1,7 +1,7 @@
from typing import Any, Dict, Tuple
from langflow.services.cache.utils import memoize_dict
from langflow.graph import Graph
-from langflow.utils.logger import logger
+from loguru import logger
@memoize_dict(maxsize=10)
diff --git a/src/backend/langflow/interface/text_splitters/base.py b/src/backend/langflow/interface/text_splitters/base.py
index 87b778c4c..8b21303ce 100644
--- a/src/backend/langflow/interface/text_splitters/base.py
+++ b/src/backend/langflow/interface/text_splitters/base.py
@@ -5,7 +5,7 @@ from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.textsplitters import TextSplittersFrontendNode
from langflow.interface.custom_lists import textsplitter_type_to_cls_dict
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/toolkits/base.py b/src/backend/langflow/interface/toolkits/base.py
index c13ffdbd9..fe0003b15 100644
--- a/src/backend/langflow/interface/toolkits/base.py
+++ b/src/backend/langflow/interface/toolkits/base.py
@@ -6,7 +6,7 @@ from langflow.interface.base import LangChainTypeCreator
from langflow.interface.importing.utils import import_class, import_module
from langflow.services.utils import get_settings_manager
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/tools/util.py b/src/backend/langflow/interface/tools/util.py
index 38276c620..f92386f18 100644
--- a/src/backend/langflow/interface/tools/util.py
+++ b/src/backend/langflow/interface/tools/util.py
@@ -3,7 +3,7 @@ import inspect
from typing import Dict, Union
from langchain.agents.tools import Tool
-from langflow.utils.logger import logger
+from loguru import logger
def get_func_tool_params(func, **kwargs) -> Union[Dict, None]:
diff --git a/src/backend/langflow/interface/types.py b/src/backend/langflow/interface/types.py
index 824b0af50..47743560e 100644
--- a/src/backend/langflow/interface/types.py
+++ b/src/backend/langflow/interface/types.py
@@ -29,7 +29,7 @@ from langflow.template.frontend_node.custom_components import (
from langflow.interface.retrievers.base import retriever_creator
from langflow.interface.custom.directory_reader import DirectoryReader
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import get_base_classes
import re
diff --git a/src/backend/langflow/interface/utilities/base.py b/src/backend/langflow/interface/utilities/base.py
index eb8cd60af..9009983b0 100644
--- a/src/backend/langflow/interface/utilities/base.py
+++ b/src/backend/langflow/interface/utilities/base.py
@@ -8,7 +8,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.utilities import UtilitiesFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class
diff --git a/src/backend/langflow/interface/utils.py b/src/backend/langflow/interface/utils.py
index 1fddbf80f..75e854e16 100644
--- a/src/backend/langflow/interface/utils.py
+++ b/src/backend/langflow/interface/utils.py
@@ -8,7 +8,7 @@ import re
import yaml
from langchain.base_language import BaseLanguageModel
from PIL.Image import Image
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.services.chat.config import ChatConfig
from langflow.services.utils import get_settings_manager
diff --git a/src/backend/langflow/interface/vector_store/base.py b/src/backend/langflow/interface/vector_store/base.py
index 4b8ca2b64..f7aca8c9c 100644
--- a/src/backend/langflow/interface/vector_store/base.py
+++ b/src/backend/langflow/interface/vector_store/base.py
@@ -7,7 +7,7 @@ from langflow.interface.importing.utils import import_class
from langflow.services.utils import get_settings_manager
from langflow.template.frontend_node.vectorstores import VectorStoreFrontendNode
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_method
diff --git a/src/backend/langflow/interface/wrappers/base.py b/src/backend/langflow/interface/wrappers/base.py
index 77e38f921..c4399fb3e 100644
--- a/src/backend/langflow/interface/wrappers/base.py
+++ b/src/backend/langflow/interface/wrappers/base.py
@@ -3,7 +3,7 @@ from typing import Dict, List, Optional
from langchain import requests, sql_database
from langflow.interface.base import LangChainTypeCreator
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.utils.util import build_template_from_class, build_template_from_method
diff --git a/src/backend/langflow/processing/base.py b/src/backend/langflow/processing/base.py
index 13ff6a385..c3d766f15 100644
--- a/src/backend/langflow/processing/base.py
+++ b/src/backend/langflow/processing/base.py
@@ -4,7 +4,7 @@ from langflow.api.v1.callback import (
StreamingLLMCallbackHandler,
)
from langflow.processing.process import fix_memory_inputs, format_actions
-from langflow.utils.logger import logger
+from loguru import logger
from langchain.agents.agent import AgentExecutor
diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py
index 4b2e7b178..c60a53de5 100644
--- a/src/backend/langflow/processing/process.py
+++ b/src/backend/langflow/processing/process.py
@@ -6,7 +6,7 @@ from langflow.interface.run import (
get_memory_key,
update_memory_keys,
)
-from langflow.utils.logger import logger
+from loguru import logger
from langflow.graph import Graph
from langchain.chains.base import Chain
from langchain.vectorstores.base import VectorStore
diff --git a/src/backend/langflow/services/chat/manager.py b/src/backend/langflow/services/chat/manager.py
index 6751e97e7..d8492e961 100644
--- a/src/backend/langflow/services/chat/manager.py
+++ b/src/backend/langflow/services/chat/manager.py
@@ -7,7 +7,7 @@ from langflow.services.cache.manager import Subject
from langflow.services.chat.utils import process_graph
from langflow.interface.utils import pil_to_base64
from langflow.services.schema import ServiceType
-from langflow.utils.logger import logger
+from loguru import logger
import asyncio
diff --git a/src/backend/langflow/services/chat/utils.py b/src/backend/langflow/services/chat/utils.py
index 17c976eb9..d9c291757 100644
--- a/src/backend/langflow/services/chat/utils.py
+++ b/src/backend/langflow/services/chat/utils.py
@@ -2,7 +2,7 @@ from fastapi import WebSocket
from langflow.api.v1.schemas import ChatMessage
from langflow.processing.base import get_result_and_steps
from langflow.interface.utils import try_setting_streaming_options
-from langflow.utils.logger import logger
+from loguru import logger
async def process_graph(
diff --git a/src/backend/langflow/services/database/manager.py b/src/backend/langflow/services/database/manager.py
index 1159cbf7a..7f8afab6f 100644
--- a/src/backend/langflow/services/database/manager.py
+++ b/src/backend/langflow/services/database/manager.py
@@ -7,7 +7,7 @@ from langflow.services.utils import get_settings_manager
from sqlalchemy import inspect
import sqlalchemy as sa
from sqlmodel import SQLModel, Session, create_engine
-from langflow.utils.logger import logger
+from loguru import logger
from alembic.config import Config
from alembic import command
from langflow.services.database import models # noqa
@@ -89,7 +89,7 @@ class DatabaseManager(Service):
for table in legacy_tables:
if table in inspector.get_table_names():
- logger.warn(f"Legacy table exists: {table}")
+ logger.warning(f"Legacy table exists: {table}")
return True
diff --git a/src/backend/langflow/services/database/utils.py b/src/backend/langflow/services/database/utils.py
index e6afae184..fd0a8856a 100644
--- a/src/backend/langflow/services/database/utils.py
+++ b/src/backend/langflow/services/database/utils.py
@@ -1,6 +1,6 @@
from dataclasses import dataclass
from typing import TYPE_CHECKING
-from langflow.utils.logger import logger
+from loguru import logger
from contextlib import contextmanager
from alembic.util.exc import CommandError
from sqlmodel import Session
diff --git a/src/backend/langflow/services/manager.py b/src/backend/langflow/services/manager.py
index ca9eb4e70..60a93fe16 100644
--- a/src/backend/langflow/services/manager.py
+++ b/src/backend/langflow/services/manager.py
@@ -1,6 +1,6 @@
from langflow.services.schema import ServiceType
from typing import TYPE_CHECKING, List, Optional
-from langflow.utils.logger import logger
+from loguru import logger
if TYPE_CHECKING:
from langflow.services.factory import ServiceFactory
diff --git a/src/backend/langflow/services/settings/auth.py b/src/backend/langflow/services/settings/auth.py
index 582aecb90..d1f8197f0 100644
--- a/src/backend/langflow/services/settings/auth.py
+++ b/src/backend/langflow/services/settings/auth.py
@@ -5,7 +5,7 @@ from langflow.services.settings.utils import read_secret_from_file, write_secret
from pydantic import BaseSettings, Field, validator
from passlib.context import CryptContext
-from langflow.utils.logger import logger
+from loguru import logger
class AuthSettings(BaseSettings):
diff --git a/src/backend/langflow/services/settings/base.py b/src/backend/langflow/services/settings/base.py
index 00cd2085f..366ff474d 100644
--- a/src/backend/langflow/services/settings/base.py
+++ b/src/backend/langflow/services/settings/base.py
@@ -8,7 +8,7 @@ from pathlib import Path
import yaml
from pydantic import BaseSettings, root_validator, validator
-from langflow.utils.logger import logger
+from loguru import logger
# BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components")
BASE_COMPONENTS_PATH = str(Path(__file__).parent.parent.parent / "components")
diff --git a/src/backend/langflow/services/settings/manager.py b/src/backend/langflow/services/settings/manager.py
index b0af8b7f1..2d687d784 100644
--- a/src/backend/langflow/services/settings/manager.py
+++ b/src/backend/langflow/services/settings/manager.py
@@ -1,7 +1,7 @@
from langflow.services.base import Service
from langflow.services.settings.auth import AuthSettings
from langflow.services.settings.base import Settings
-from langflow.utils.logger import logger
+from loguru import logger
import os
import yaml
diff --git a/src/backend/langflow/services/settings/utils.py b/src/backend/langflow/services/settings/utils.py
index bb411a299..fae96ff28 100644
--- a/src/backend/langflow/services/settings/utils.py
+++ b/src/backend/langflow/services/settings/utils.py
@@ -2,7 +2,7 @@ import os
from pathlib import Path
import platform
-from langflow.utils.logger import logger
+from loguru import logger
def set_secure_permissions(file_path):
diff --git a/src/backend/langflow/utils/logger.py b/src/backend/langflow/utils/logger.py
index deb0f75ca..1f616486b 100644
--- a/src/backend/langflow/utils/logger.py
+++ b/src/backend/langflow/utils/logger.py
@@ -1,30 +1,35 @@
-import logging
+from typing import Optional
+from loguru import logger
from pathlib import Path
-
from rich.logging import RichHandler
-logger = logging.getLogger("langflow")
+def configure(log_level: str = "DEBUG", log_file: Optional[Path] = None):
+ log_format = "{time:HH:mm:ss} - {level: <8} - {message}"
+ logger.remove() # Remove default handlers
-def configure(log_level: str = "DEBUG", log_file: Path = None): # type: ignore
- log_format = "%(asctime)s - %(levelname)s - %(message)s"
- log_level_value = getattr(logging, log_level.upper(), logging.INFO)
-
- logging.basicConfig(
- level=log_level_value,
- format=log_format,
- datefmt="[%X]",
- handlers=[RichHandler(rich_tracebacks=True)],
+ # Configure loguru to use RichHandler
+ logger.configure(
+ handlers=[
+ {
+ "sink": RichHandler(rich_tracebacks=True, markup=True),
+ "format": log_format,
+ "level": log_level.upper(),
+ }
+ ]
)
if log_file:
log_file = Path(log_file)
log_file.parent.mkdir(parents=True, exist_ok=True)
- file_handler = logging.FileHandler(log_file)
- file_handler.setFormatter(logging.Formatter(log_format))
- logger.addHandler(file_handler)
+ logger.add(
+ sink=str(log_file),
+ level=log_level.upper(),
+ format=log_format,
+ rotation="10 MB", # Log rotation based on file size
+ )
- logger.info(f"Logger set up with log level: {log_level_value}({log_level})")
+ logger.info(f"Logger set up with log level: {log_level}")
if log_file:
logger.info(f"Log file: {log_file}")