diff --git a/.gitignore b/.gitignore index 18fd575c85..ec3d1925d5 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,5 @@ yolo11n.pt # symlink one of .envrc.* if you'd like to use .envrc .claude + +/logs diff --git a/dimos/agents/agent.py b/dimos/agents/agent.py index 65b4509bfb..fc771ffecf 100644 --- a/dimos/agents/agent.py +++ b/dimos/agents/agent.py @@ -61,7 +61,7 @@ load_dotenv() # Initialize logger for the agent module -logger = setup_logger("dimos.agents") +logger = setup_logger() # Constants _TOKEN_BUDGET_PARTS = 4 # Number of parts to divide token budget diff --git a/dimos/agents/claude_agent.py b/dimos/agents/claude_agent.py index a6c81fc4c7..0e3fda3d59 100644 --- a/dimos/agents/claude_agent.py +++ b/dimos/agents/claude_agent.py @@ -46,7 +46,7 @@ load_dotenv() # Initialize logger for the Claude agent -logger = setup_logger("dimos.agents.claude") +logger = setup_logger() # Response object compatible with LLMAgent diff --git a/dimos/agents/memory/base.py b/dimos/agents/memory/base.py index 3431f3c83f..18a8e8a7e6 100644 --- a/dimos/agents/memory/base.py +++ b/dimos/agents/memory/base.py @@ -37,7 +37,7 @@ def __init__(self, connection_type: str = "local", **kwargs) -> None: # type: i UnknownConnectionTypeError: If an unrecognized connection type is specified. AgentMemoryConnectionError: If initializing the database connection fails. """ - self.logger = setup_logger(self.__class__.__name__) + self.logger = setup_logger() self.logger.info("Initializing AgentMemory with connection type: %s", connection_type) self.connection_params = kwargs self.db_connection = ( diff --git a/dimos/agents/memory/image_embedding.py b/dimos/agents/memory/image_embedding.py index 1c2464f9b0..99ca3fcc3f 100644 --- a/dimos/agents/memory/image_embedding.py +++ b/dimos/agents/memory/image_embedding.py @@ -30,7 +30,7 @@ from dimos.utils.data import get_data from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.agents.memory.image_embedding") +logger = setup_logger() class ImageEmbeddingProvider: diff --git a/dimos/agents/memory/spatial_vector_db.py b/dimos/agents/memory/spatial_vector_db.py index 5b1a29741f..1e0611d643 100644 --- a/dimos/agents/memory/spatial_vector_db.py +++ b/dimos/agents/memory/spatial_vector_db.py @@ -28,7 +28,7 @@ from dimos.types.robot_location import RobotLocation from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.agents.memory.spatial_vector_db") +logger = setup_logger() class SpatialVectorDB: diff --git a/dimos/agents/memory/visual_memory.py b/dimos/agents/memory/visual_memory.py index 955c67a749..25f511399c 100644 --- a/dimos/agents/memory/visual_memory.py +++ b/dimos/agents/memory/visual_memory.py @@ -25,7 +25,7 @@ from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.agents.memory.visual_memory") +logger = setup_logger() class VisualMemory: diff --git a/dimos/agents/modules/base.py b/dimos/agents/modules/base.py index 7abd5ac513..8714378a89 100644 --- a/dimos/agents/modules/base.py +++ b/dimos/agents/modules/base.py @@ -33,7 +33,7 @@ except ImportError: from dimos.agents.modules.gateway import UnifiedGatewayClient -logger = setup_logger("dimos.agents.modules.base") +logger = setup_logger() # Vision-capable models VISION_MODELS = { diff --git a/dimos/agents/modules/base_agent.py b/dimos/agents/modules/base_agent.py index 5f2a14209f..9e62b7ff13 100644 --- a/dimos/agents/modules/base_agent.py +++ b/dimos/agents/modules/base_agent.py @@ -29,7 +29,7 @@ except ImportError: from dimos.agents.modules.base import BaseAgent -logger = setup_logger("dimos.agents.modules.base_agent") +logger = setup_logger() class BaseAgentModule(BaseAgent, Module): # type: ignore[misc] diff --git a/dimos/agents/tokenizer/huggingface_tokenizer.py b/dimos/agents/tokenizer/huggingface_tokenizer.py index e259b5810a..cf51347253 100644 --- a/dimos/agents/tokenizer/huggingface_tokenizer.py +++ b/dimos/agents/tokenizer/huggingface_tokenizer.py @@ -57,7 +57,7 @@ def image_token_count(image_width, image_height, image_detail: str = "high"): # """ Calculate the number of tokens in an image. Low detail is 85 tokens, high detail is 170 tokens per 512x512 square. """ - logger = setup_logger("dimos.agents.tokenizer.HuggingFaceTokenizer.image_token_count") + logger = setup_logger() if image_detail == "low": return 85 diff --git a/dimos/agents/tokenizer/openai_tokenizer.py b/dimos/agents/tokenizer/openai_tokenizer.py index 0f09c8ea9b..15de95aafe 100644 --- a/dimos/agents/tokenizer/openai_tokenizer.py +++ b/dimos/agents/tokenizer/openai_tokenizer.py @@ -57,7 +57,7 @@ def image_token_count(image_width, image_height, image_detail: str = "high"): # """ Calculate the number of tokens in an image. Low detail is 85 tokens, high detail is 170 tokens per 512x512 square. """ - logger = setup_logger("dimos.agents.tokenizer.openai.image_token_count") + logger = setup_logger() if image_detail == "low": return 85 diff --git a/dimos/agents2/agent.py b/dimos/agents2/agent.py index 7c37febec0..45852767d3 100644 --- a/dimos/agents2/agent.py +++ b/dimos/agents2/agent.py @@ -42,7 +42,7 @@ from dimos.protocol.skill.type import Output from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.protocol.agents2") +logger = setup_logger() SYSTEM_MSG_APPEND = "\nYour message history will always be appended with a System Overview message that provides situational awareness." diff --git a/dimos/agents2/cli/web.py b/dimos/agents2/cli/web.py index cb589ac5ce..514c9300fb 100644 --- a/dimos/agents2/cli/web.py +++ b/dimos/agents2/cli/web.py @@ -28,7 +28,7 @@ if TYPE_CHECKING: from dimos.stream.audio.base import AudioEvent -logger = setup_logger(__name__) +logger = setup_logger() class WebInput(Module): diff --git a/dimos/agents2/ollama_agent.py b/dimos/agents2/ollama_agent.py index 26179d7418..48c4a23100 100644 --- a/dimos/agents2/ollama_agent.py +++ b/dimos/agents2/ollama_agent.py @@ -16,7 +16,7 @@ from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() def ensure_ollama_model(model_name: str) -> None: diff --git a/dimos/agents2/skills/google_maps_skill_container.py b/dimos/agents2/skills/google_maps_skill_container.py index 91a9621fd6..30578faf96 100644 --- a/dimos/agents2/skills/google_maps_skill_container.py +++ b/dimos/agents2/skills/google_maps_skill_container.py @@ -23,7 +23,7 @@ from dimos.protocol.skill.skill import skill from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class GoogleMapsSkillContainer(SkillModule): diff --git a/dimos/agents2/skills/gps_nav_skill.py b/dimos/agents2/skills/gps_nav_skill.py index 6b5df31d87..a0b771ef55 100644 --- a/dimos/agents2/skills/gps_nav_skill.py +++ b/dimos/agents2/skills/gps_nav_skill.py @@ -23,7 +23,7 @@ from dimos.protocol.skill.skill import skill from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class GpsNavSkillContainer(SkillModule): diff --git a/dimos/agents2/skills/navigation.py b/dimos/agents2/skills/navigation.py index 1b03736073..ecf341a1d1 100644 --- a/dimos/agents2/skills/navigation.py +++ b/dimos/agents2/skills/navigation.py @@ -29,7 +29,7 @@ from dimos.types.robot_location import RobotLocation from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class NavigationSkillContainer(SkillModule): diff --git a/dimos/agents2/skills/osm.py b/dimos/agents2/skills/osm.py index e2a1a689fe..7e7fc23a24 100644 --- a/dimos/agents2/skills/osm.py +++ b/dimos/agents2/skills/osm.py @@ -22,7 +22,7 @@ from dimos.protocol.skill.skill import skill from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class OsmSkill(SkillModule): diff --git a/dimos/agents2/skills/speak_skill.py b/dimos/agents2/skills/speak_skill.py index 0623824266..5567410b69 100644 --- a/dimos/agents2/skills/speak_skill.py +++ b/dimos/agents2/skills/speak_skill.py @@ -24,7 +24,7 @@ from dimos.stream.audio.tts.node_openai import OpenAITTSNode, Voice from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.agents2.skills.speak_skill") +logger = setup_logger() class SpeakSkill(SkillModule): diff --git a/dimos/agents2/spec.py b/dimos/agents2/spec.py index e20d622610..0658a01c48 100644 --- a/dimos/agents2/spec.py +++ b/dimos/agents2/spec.py @@ -39,7 +39,7 @@ from dimos.utils.generic import truncate_display_string from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.agents.modules.base_agent") +logger = setup_logger() # Dynamically create ModelProvider enum from LangChain's supported providers diff --git a/dimos/constants.py b/dimos/constants.py index 17273b6dd3..d5a45906f1 100644 --- a/dimos/constants.py +++ b/dimos/constants.py @@ -16,6 +16,8 @@ DIMOS_PROJECT_ROOT = Path(__file__).parent.parent +DIMOS_LOG_DIR = DIMOS_PROJECT_ROOT / "logs" + """ Constants for shared memory Usually, auto-detection for size would be preferred. Sadly, though, channels are made diff --git a/dimos/core/__init__.py b/dimos/core/__init__.py index 14f3ff27b6..fd1315a73b 100644 --- a/dimos/core/__init__.py +++ b/dimos/core/__init__.py @@ -23,6 +23,9 @@ from dimos.protocol.rpc.spec import RPCSpec from dimos.protocol.tf import LCMTF, TF, PubSubTF, TFConfig, TFSpec from dimos.utils.actor_registry import ActorRegistry +from dimos.utils.logging_config import setup_logger + +logger = setup_logger() __all__ = [ "LCMRPC", @@ -91,7 +94,7 @@ def deploy( # type: ignore[no-untyped-def] **kwargs, ): console = Console() - with console.status(f"deploying [green]{actor_class.__name__}", spinner="arc"): + with console.status(f"deploying [green]{actor_class.__name__}\n", spinner="arc"): actor = dask_client.submit( # type: ignore[no-untyped-call] actor_class, *args, @@ -100,7 +103,7 @@ def deploy( # type: ignore[no-untyped-def] ).result() worker = actor.set_ref(actor).result() - print(f"deployed: {colors.blue(actor)} @ {colors.orange('worker ' + str(worker))}") + logger.info("Deployed module.", module=actor._cls.__name__, worker_id=worker) # Register actor deployment in shared memory ActorRegistry.update(str(actor), str(worker)) diff --git a/dimos/core/rpc_client.py b/dimos/core/rpc_client.py index 9744620615..5715f1d7d2 100644 --- a/dimos/core/rpc_client.py +++ b/dimos/core/rpc_client.py @@ -18,7 +18,7 @@ from dimos.protocol.rpc.lcmrpc import LCMRPC from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class RpcCall: diff --git a/dimos/core/stream.py b/dimos/core/stream.py index aa58904678..30a015fa6e 100644 --- a/dimos/core/stream.py +++ b/dimos/core/stream.py @@ -40,7 +40,7 @@ T = TypeVar("T") -logger = setup_logger(__file__) +logger = setup_logger() class ObservableMixin(Generic[T]): diff --git a/dimos/hardware/camera/zed/camera.py b/dimos/hardware/camera/zed/camera.py index b74942720c..afe400b35c 100644 --- a/dimos/hardware/camera/zed/camera.py +++ b/dimos/hardware/camera/zed/camera.py @@ -31,7 +31,7 @@ from dimos.protocol.tf import TF from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__) +logger = setup_logger() class ZEDCamera: diff --git a/dimos/hardware/fake_zed_module.py b/dimos/hardware/fake_zed_module.py index fc54c111fc..debf91508b 100644 --- a/dimos/hardware/fake_zed_module.py +++ b/dimos/hardware/fake_zed_module.py @@ -31,7 +31,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.testing import TimedSensorReplay -logger = setup_logger(__name__, level=logging.INFO) +logger = setup_logger(level=logging.INFO) class FakeZEDModule(Module): diff --git a/dimos/hardware/gstreamer_camera.py b/dimos/hardware/gstreamer_camera.py index d40587278b..79fad6c930 100644 --- a/dimos/hardware/gstreamer_camera.py +++ b/dimos/hardware/gstreamer_camera.py @@ -35,7 +35,7 @@ gi.require_version("GstApp", "1.0") from gi.repository import GLib, Gst # type: ignore[import-not-found] -logger = setup_logger("dimos.hardware.gstreamer_camera", level=logging.INFO) +logger = setup_logger(level=logging.INFO) Gst.init(None) diff --git a/dimos/hardware/piper_arm.py b/dimos/hardware/piper_arm.py index 5d8a41545f..e8be04a9b3 100644 --- a/dimos/hardware/piper_arm.py +++ b/dimos/hardware/piper_arm.py @@ -35,7 +35,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import euler_to_quaternion, quaternion_to_euler -logger = setup_logger(__file__) +logger = setup_logger() class PiperArm: diff --git a/dimos/manipulation/manip_aio_pipeline.py b/dimos/manipulation/manip_aio_pipeline.py index b351b84ec9..747eb3a0a9 100644 --- a/dimos/manipulation/manip_aio_pipeline.py +++ b/dimos/manipulation/manip_aio_pipeline.py @@ -37,7 +37,7 @@ from dimos.perception.pointcloud.utils import create_point_cloud_overlay_visualization from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.manip_aio_pipeline") +logger = setup_logger() class ManipulationPipeline: diff --git a/dimos/manipulation/manip_aio_processer.py b/dimos/manipulation/manip_aio_processer.py index 56be0860da..52c31e21d3 100644 --- a/dimos/manipulation/manip_aio_processer.py +++ b/dimos/manipulation/manip_aio_processer.py @@ -41,7 +41,7 @@ from dimos.perception.segmentation.sam_2d_seg import Sam2DSegmenter from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.manip_aio_processor") +logger = setup_logger() class ManipulationProcessor: diff --git a/dimos/manipulation/manipulation_history.py b/dimos/manipulation/manipulation_history.py index 4b82f06a74..2c63dfa46f 100644 --- a/dimos/manipulation/manipulation_history.py +++ b/dimos/manipulation/manipulation_history.py @@ -41,7 +41,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.types.manipulation_history") +logger = setup_logger() @dataclass diff --git a/dimos/manipulation/manipulation_interface.py b/dimos/manipulation/manipulation_interface.py index 07cffe3861..f6155db8d9 100644 --- a/dimos/manipulation/manipulation_interface.py +++ b/dimos/manipulation/manipulation_interface.py @@ -37,7 +37,7 @@ if TYPE_CHECKING: from reactivex.disposable import Disposable -logger = setup_logger("dimos.robot.manipulation_interface") +logger = setup_logger() class ManipulationInterface: diff --git a/dimos/manipulation/visual_servoing/detection3d.py b/dimos/manipulation/visual_servoing/detection3d.py index f758317c03..41d1d02180 100644 --- a/dimos/manipulation/visual_servoing/detection3d.py +++ b/dimos/manipulation/visual_servoing/detection3d.py @@ -43,7 +43,7 @@ from dimos.perception.segmentation.sam_2d_seg import Sam2DSegmenter from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.manipulation.visual_servoing.detection3d") +logger = setup_logger() class Detection3DProcessor: diff --git a/dimos/manipulation/visual_servoing/manipulation_module.py b/dimos/manipulation/visual_servoing/manipulation_module.py index c2e55fd3cb..6739d4f44f 100644 --- a/dimos/manipulation/visual_servoing/manipulation_module.py +++ b/dimos/manipulation/visual_servoing/manipulation_module.py @@ -51,7 +51,7 @@ pose_to_matrix, ) -logger = setup_logger("dimos.manipulation.visual_servoing.manipulation_module") +logger = setup_logger() class GraspStage(Enum): diff --git a/dimos/manipulation/visual_servoing/pbvs.py b/dimos/manipulation/visual_servoing/pbvs.py index ba1ab4c076..10cf66c726 100644 --- a/dimos/manipulation/visual_servoing/pbvs.py +++ b/dimos/manipulation/visual_servoing/pbvs.py @@ -33,7 +33,7 @@ from dimos.msgs.vision_msgs import Detection3DArray from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.manipulation.pbvs") +logger = setup_logger() class PBVS: diff --git a/dimos/mapping/google_maps/google_maps.py b/dimos/mapping/google_maps/google_maps.py index 7f99fc12f4..0ea10eda49 100644 --- a/dimos/mapping/google_maps/google_maps.py +++ b/dimos/mapping/google_maps/google_maps.py @@ -27,7 +27,7 @@ from dimos.mapping.utils.distance import distance_in_meters from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class GoogleMaps: diff --git a/dimos/mapping/osm/current_location_map.py b/dimos/mapping/osm/current_location_map.py index 749972e94b..7d6c132486 100644 --- a/dimos/mapping/osm/current_location_map.py +++ b/dimos/mapping/osm/current_location_map.py @@ -19,7 +19,7 @@ from dimos.models.vl.base import VlModel from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class CurrentLocationMap: diff --git a/dimos/mapping/osm/query.py b/dimos/mapping/osm/query.py index 4501525880..1cce73ea0b 100644 --- a/dimos/mapping/osm/query.py +++ b/dimos/mapping/osm/query.py @@ -22,7 +22,7 @@ _PROLOGUE = "This is an image of an open street map I'm on." _JSON = "Please only respond with valid JSON." -logger = setup_logger(__name__) +logger = setup_logger() def query_for_one_position(vl_model: VlModel, map_image: MapImage, query: str) -> LatLon | None: diff --git a/dimos/navigation/bbox_navigation.py b/dimos/navigation/bbox_navigation.py index 8d84509dc8..07951fd216 100644 --- a/dimos/navigation/bbox_navigation.py +++ b/dimos/navigation/bbox_navigation.py @@ -22,7 +22,7 @@ from dimos.msgs.vision_msgs import Detection2DArray from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__, level=logging.DEBUG) +logger = setup_logger(level=logging.DEBUG) class BBoxNavigationModule(Module): diff --git a/dimos/navigation/bt_navigator/navigator.py b/dimos/navigation/bt_navigator/navigator.py index 1446e72268..7198ecf94e 100644 --- a/dimos/navigation/bt_navigator/navigator.py +++ b/dimos/navigation/bt_navigator/navigator.py @@ -36,7 +36,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import apply_transform -logger = setup_logger(__file__) +logger = setup_logger() class BehaviorTreeNavigator(Module, NavigationInterface): diff --git a/dimos/navigation/bt_navigator/recovery_server.py b/dimos/navigation/bt_navigator/recovery_server.py index 264c6f0b63..c99470aa39 100644 --- a/dimos/navigation/bt_navigator/recovery_server.py +++ b/dimos/navigation/bt_navigator/recovery_server.py @@ -22,7 +22,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import get_distance -logger = setup_logger("dimos.navigation.bt_navigator.recovery_server") +logger = setup_logger() class RecoveryServer: diff --git a/dimos/navigation/demo_ros_navigation.py b/dimos/navigation/demo_ros_navigation.py index f2e9763212..855e9ecae5 100644 --- a/dimos/navigation/demo_ros_navigation.py +++ b/dimos/navigation/demo_ros_navigation.py @@ -24,7 +24,7 @@ from dimos.protocol import pubsub from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() def main() -> None: diff --git a/dimos/navigation/frontier_exploration/wavefront_frontier_goal_selector.py b/dimos/navigation/frontier_exploration/wavefront_frontier_goal_selector.py index 60e24dbe36..c6495fab70 100644 --- a/dimos/navigation/frontier_exploration/wavefront_frontier_goal_selector.py +++ b/dimos/navigation/frontier_exploration/wavefront_frontier_goal_selector.py @@ -34,7 +34,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import get_distance -logger = setup_logger("dimos.robot.unitree.frontier_exploration") +logger = setup_logger() class PointClassification(IntFlag): diff --git a/dimos/navigation/global_planner/algo.py b/dimos/navigation/global_planner/algo.py index fcd58cf5f0..aecfcfba83 100644 --- a/dimos/navigation/global_planner/algo.py +++ b/dimos/navigation/global_planner/algo.py @@ -18,7 +18,7 @@ from dimos.msgs.nav_msgs import CostValues, OccupancyGrid, Path from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.unitree.global_planner.astar") +logger = setup_logger() def astar( diff --git a/dimos/navigation/global_planner/planner.py b/dimos/navigation/global_planner/planner.py index 91780f219d..4b81cdb5d1 100644 --- a/dimos/navigation/global_planner/planner.py +++ b/dimos/navigation/global_planner/planner.py @@ -22,7 +22,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import euler_to_quaternion -logger = setup_logger(__file__) +logger = setup_logger() import math diff --git a/dimos/navigation/local_planner/local_planner.py b/dimos/navigation/local_planner/local_planner.py index af2a99f172..660c1b5894 100644 --- a/dimos/navigation/local_planner/local_planner.py +++ b/dimos/navigation/local_planner/local_planner.py @@ -31,7 +31,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import get_distance, normalize_angle, quaternion_to_euler -logger = setup_logger(__file__) +logger = setup_logger() class BaseLocalPlanner(Module): diff --git a/dimos/navigation/rosnav.py b/dimos/navigation/rosnav.py index ca8bca3f8f..f65559ddb4 100644 --- a/dimos/navigation/rosnav.py +++ b/dimos/navigation/rosnav.py @@ -60,7 +60,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.transform_utils import euler_to_quaternion -logger = setup_logger("dimos.robot.unitree_webrtc.nav_bot", level=logging.INFO) +logger = setup_logger(level=logging.INFO) @dataclass diff --git a/dimos/perception/common/utils.py b/dimos/perception/common/utils.py index 2fdd441855..a1ee2e77cc 100644 --- a/dimos/perception/common/utils.py +++ b/dimos/perception/common/utils.py @@ -32,7 +32,7 @@ from dimos.types.vector import Vector from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.common.utils") +logger = setup_logger() # Optional CuPy support try: # pragma: no cover - optional dependency diff --git a/dimos/perception/detection/detectors/person/yolo.py b/dimos/perception/detection/detectors/person/yolo.py index 3f58dc75ce..0e6864af42 100644 --- a/dimos/perception/detection/detectors/person/yolo.py +++ b/dimos/perception/detection/detectors/person/yolo.py @@ -21,7 +21,7 @@ from dimos.utils.gpu_utils import is_cuda_available from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.detection.yolo.person") +logger = setup_logger() class YoloPersonDetector(Detector): diff --git a/dimos/perception/detection/detectors/yolo.py b/dimos/perception/detection/detectors/yolo.py index 22ecf16259..005d01bfc7 100644 --- a/dimos/perception/detection/detectors/yolo.py +++ b/dimos/perception/detection/detectors/yolo.py @@ -21,7 +21,7 @@ from dimos.utils.gpu_utils import is_cuda_available from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.detection.yolo_2d_det") +logger = setup_logger() class Yolo2DDetector(Detector): diff --git a/dimos/perception/grasp_generation/grasp_generation.py b/dimos/perception/grasp_generation/grasp_generation.py index b6f0cee936..74a9f5eeb0 100644 --- a/dimos/perception/grasp_generation/grasp_generation.py +++ b/dimos/perception/grasp_generation/grasp_generation.py @@ -25,7 +25,7 @@ from dimos.types.manipulation import ObjectData from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.grasp_generation") +logger = setup_logger() class HostedGraspGenerator: diff --git a/dimos/perception/object_detection_stream.py b/dimos/perception/object_detection_stream.py index 0f15d75f60..844bdbd740 100644 --- a/dimos/perception/object_detection_stream.py +++ b/dimos/perception/object_detection_stream.py @@ -45,7 +45,7 @@ from dimos.types.manipulation import ObjectData # Initialize logger for the ObjectDetectionStream -logger = setup_logger("dimos.perception.object_detection_stream") +logger = setup_logger() class ObjectDetectionStream: diff --git a/dimos/perception/object_tracker.py b/dimos/perception/object_tracker.py index 5ca078fb23..d1f8dd3d9c 100644 --- a/dimos/perception/object_tracker.py +++ b/dimos/perception/object_tracker.py @@ -42,7 +42,7 @@ yaw_towards_point, ) -logger = setup_logger("dimos.perception.object_tracker") +logger = setup_logger() class ObjectTracking(Module): diff --git a/dimos/perception/object_tracker_2d.py b/dimos/perception/object_tracker_2d.py index 1cc0ed70ab..5323d90fea 100644 --- a/dimos/perception/object_tracker_2d.py +++ b/dimos/perception/object_tracker_2d.py @@ -36,7 +36,7 @@ from dimos.msgs.vision_msgs import Detection2DArray from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.object_tracker_2d", level=logging.INFO) +logger = setup_logger(level=logging.INFO) class ObjectTracker2D(Module): diff --git a/dimos/perception/object_tracker_3d.py b/dimos/perception/object_tracker_3d.py index 1f22c9b5d7..ed810b3a19 100644 --- a/dimos/perception/object_tracker_3d.py +++ b/dimos/perception/object_tracker_3d.py @@ -37,7 +37,7 @@ yaw_towards_point, ) -logger = setup_logger("dimos.perception.object_tracker_3d") +logger = setup_logger() class ObjectTracker3D(ObjectTracker2D): diff --git a/dimos/perception/person_tracker.py b/dimos/perception/person_tracker.py index 709ed0efb4..38aa1a1e63 100644 --- a/dimos/perception/person_tracker.py +++ b/dimos/perception/person_tracker.py @@ -25,7 +25,7 @@ from dimos.perception.detection2d.yolo_2d_det import Yolo2DDetector # type: ignore[import-untyped] from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.person_tracker") +logger = setup_logger() class PersonTrackingStream(Module): diff --git a/dimos/perception/segmentation/sam_2d_seg.py b/dimos/perception/segmentation/sam_2d_seg.py index 0fe5507d93..83da24a8cf 100644 --- a/dimos/perception/segmentation/sam_2d_seg.py +++ b/dimos/perception/segmentation/sam_2d_seg.py @@ -34,7 +34,7 @@ from dimos.utils.gpu_utils import is_cuda_available from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.perception.segmentation.sam_2d_seg") +logger = setup_logger() class Sam2DSegmenter: diff --git a/dimos/perception/spatial_perception.py b/dimos/perception/spatial_perception.py index 13f6143651..b41b29b1f6 100644 --- a/dimos/perception/spatial_perception.py +++ b/dimos/perception/spatial_perception.py @@ -47,7 +47,7 @@ _VISUAL_MEMORY_PATH = _SPATIAL_MEMORY_DIR / "visual_memory.pkl" -logger = setup_logger(__file__) +logger = setup_logger() class SpatialMemory(Module): diff --git a/dimos/perception/test_spatial_memory_module.py b/dimos/perception/test_spatial_memory_module.py index f89c975d89..fc2629f256 100644 --- a/dimos/perception/test_spatial_memory_module.py +++ b/dimos/perception/test_spatial_memory_module.py @@ -30,7 +30,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.testing import TimedSensorReplay -logger = setup_logger("test_spatial_memory_module") +logger = setup_logger() pubsub.lcm.autoconf() diff --git a/dimos/protocol/pubsub/lcmpubsub.py b/dimos/protocol/pubsub/lcmpubsub.py index a12b96e762..f25ce27337 100644 --- a/dimos/protocol/pubsub/lcmpubsub.py +++ b/dimos/protocol/pubsub/lcmpubsub.py @@ -29,7 +29,7 @@ from collections.abc import Callable import threading -logger = setup_logger(__name__) +logger = setup_logger() @runtime_checkable diff --git a/dimos/protocol/pubsub/shmpubsub.py b/dimos/protocol/pubsub/shmpubsub.py index 6224faf410..1a03eddb20 100644 --- a/dimos/protocol/pubsub/shmpubsub.py +++ b/dimos/protocol/pubsub/shmpubsub.py @@ -38,7 +38,7 @@ if TYPE_CHECKING: from collections.abc import Callable -logger = setup_logger("dimos.protocol.pubsub.sharedmemory") +logger = setup_logger() # -------------------------------------------------------------------------------------- diff --git a/dimos/protocol/pubsub/spec.py b/dimos/protocol/pubsub/spec.py index da7cd8e9a6..caca0bc4cf 100644 --- a/dimos/protocol/pubsub/spec.py +++ b/dimos/protocol/pubsub/spec.py @@ -26,7 +26,7 @@ TopicT = TypeVar("TopicT") -logger = setup_logger(__name__) +logger = setup_logger() class PubSub(Generic[TopicT, MsgT], ABC): diff --git a/dimos/protocol/rpc/pubsubrpc.py b/dimos/protocol/rpc/pubsubrpc.py index 6146261159..6d915bc9a4 100644 --- a/dimos/protocol/rpc/pubsubrpc.py +++ b/dimos/protocol/rpc/pubsubrpc.py @@ -32,7 +32,7 @@ if TYPE_CHECKING: from types import FunctionType -logger = setup_logger(__file__) +logger = setup_logger() MsgT = TypeVar("MsgT") TopicT = TypeVar("TopicT") diff --git a/dimos/protocol/service/lcmservice.py b/dimos/protocol/service/lcmservice.py index 83e26e2dc0..29abc65134 100644 --- a/dimos/protocol/service/lcmservice.py +++ b/dimos/protocol/service/lcmservice.py @@ -29,7 +29,7 @@ from dimos.protocol.service.spec import Service from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.protocol.service.lcmservice") +logger = setup_logger() @cache diff --git a/dimos/protocol/skill/coordinator.py b/dimos/protocol/skill/coordinator.py index 45ffeee814..5bdbcec855 100644 --- a/dimos/protocol/skill/coordinator.py +++ b/dimos/protocol/skill/coordinator.py @@ -35,7 +35,7 @@ from dimos.protocol.skill.utils import interpret_tool_call_args from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() @dataclass diff --git a/dimos/robot/agilex/piper_arm.py b/dimos/robot/agilex/piper_arm.py index c1363a496c..0dada10099 100644 --- a/dimos/robot/agilex/piper_arm.py +++ b/dimos/robot/agilex/piper_arm.py @@ -28,7 +28,7 @@ from dimos.types.robot_capabilities import RobotCapability from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.agilex.piper_arm") +logger = setup_logger() class PiperArmRobot(Robot): diff --git a/dimos/robot/agilex/run.py b/dimos/robot/agilex/run.py index 4958883488..b810272e0a 100644 --- a/dimos/robot/agilex/run.py +++ b/dimos/robot/agilex/run.py @@ -34,7 +34,7 @@ from dimos.utils.logging_config import setup_logger from dimos.web.robot_web_interface import RobotWebInterface -logger = setup_logger("dimos.robot.agilex.run") +logger = setup_logger() # Load environment variables load_dotenv() diff --git a/dimos/robot/cli/dimos.py b/dimos/robot/cli/dimos.py index 28e046d22b..ee7e25b060 100644 --- a/dimos/robot/cli/dimos.py +++ b/dimos/robot/cli/dimos.py @@ -23,6 +23,7 @@ from dimos.core.global_config import GlobalConfig from dimos.protocol import pubsub from dimos.robot.all_blueprints import all_blueprints, get_blueprint_by_name, get_module_by_name +from dimos.utils.logging_config import setup_exception_handler RobotType = Enum("RobotType", {key.replace("-", "_").upper(): key for key in all_blueprints.keys()}) # type: ignore[misc] @@ -108,6 +109,8 @@ def run( ), ) -> None: """Start a robot blueprint""" + setup_exception_handler() + config: GlobalConfig = ctx.obj pubsub.lcm.autoconf() # type: ignore[attr-defined] blueprint = get_blueprint_by_name(robot_type.value) diff --git a/dimos/robot/position_stream.py b/dimos/robot/position_stream.py index b2c4979d22..34d07daabb 100644 --- a/dimos/robot/position_stream.py +++ b/dimos/robot/position_stream.py @@ -28,7 +28,7 @@ from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.position_stream", level=logging.INFO) +logger = setup_logger(level=logging.INFO) class PositionStreamProvider: diff --git a/dimos/robot/ros_bridge.py b/dimos/robot/ros_bridge.py index c0740a4ca8..0727e6a997 100644 --- a/dimos/robot/ros_bridge.py +++ b/dimos/robot/ros_bridge.py @@ -35,7 +35,7 @@ from dimos.protocol.pubsub.lcmpubsub import LCM, Topic from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.ros_bridge", level=logging.INFO) +logger = setup_logger(level=logging.INFO) class BridgeDirection(Enum): diff --git a/dimos/robot/ros_command_queue.py b/dimos/robot/ros_command_queue.py index b6e07063dc..73fc63c5f1 100644 --- a/dimos/robot/ros_command_queue.py +++ b/dimos/robot/ros_command_queue.py @@ -31,7 +31,7 @@ from dimos.utils.logging_config import setup_logger # Initialize logger for the ros command queue module -logger = setup_logger("dimos.robot.ros_command_queue") +logger = setup_logger() class CommandType(Enum): diff --git a/dimos/robot/unitree/connection/g1.py b/dimos/robot/unitree/connection/g1.py index 044249b18a..c515535965 100644 --- a/dimos/robot/unitree/connection/g1.py +++ b/dimos/robot/unitree/connection/g1.py @@ -24,7 +24,7 @@ from dimos.robot.unitree.connection.connection import UnitreeWebRTCConnection from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class G1Connection(Module): diff --git a/dimos/robot/unitree/connection/g1sim.py b/dimos/robot/unitree/connection/g1sim.py index 07602fd736..8a81c06af9 100644 --- a/dimos/robot/unitree/connection/g1sim.py +++ b/dimos/robot/unitree/connection/g1sim.py @@ -34,7 +34,7 @@ if TYPE_CHECKING: from dimos.robot.unitree_webrtc.mujoco_connection import MujocoConnection -logger = setup_logger(__file__) +logger = setup_logger() class G1SimConnection(Module): diff --git a/dimos/robot/unitree/connection/go2.py b/dimos/robot/unitree/connection/go2.py index 9ce566f275..9a68fa6d10 100644 --- a/dimos/robot/unitree/connection/go2.py +++ b/dimos/robot/unitree/connection/go2.py @@ -40,7 +40,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.testing import TimedSensorReplay -logger = setup_logger(__file__, level=logging.INFO) +logger = setup_logger(level=logging.INFO) class Go2ConnectionProtocol(Protocol): diff --git a/dimos/robot/unitree/g1/g1zed.py b/dimos/robot/unitree/g1/g1zed.py index 4b63de9f3c..301f3a0854 100644 --- a/dimos/robot/unitree/g1/g1zed.py +++ b/dimos/robot/unitree/g1/g1zed.py @@ -32,7 +32,7 @@ from dimos.robot.unitree.connection.g1 import G1Connection from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__) +logger = setup_logger() class G1ZedDeployResult(TypedDict): diff --git a/dimos/robot/unitree/go2/go2.py b/dimos/robot/unitree/go2/go2.py index 53614c09d0..eee38a3cad 100644 --- a/dimos/robot/unitree/go2/go2.py +++ b/dimos/robot/unitree/go2/go2.py @@ -19,7 +19,7 @@ from dimos.robot.unitree.connection import go2 from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__, level=logging.INFO) +logger = setup_logger(level=logging.INFO) def deploy(dimos: DimosCluster, ip: str): # type: ignore[no-untyped-def] diff --git a/dimos/robot/unitree_webrtc/depth_module.py b/dimos/robot/unitree_webrtc/depth_module.py index ccf0202098..35a2acb272 100644 --- a/dimos/robot/unitree_webrtc/depth_module.py +++ b/dimos/robot/unitree_webrtc/depth_module.py @@ -25,7 +25,7 @@ from dimos.msgs.sensor_msgs import Image, ImageFormat from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__) +logger = setup_logger() class DepthModule(Module): diff --git a/dimos/robot/unitree_webrtc/modular/connection_module.py b/dimos/robot/unitree_webrtc/modular/connection_module.py index de5b001233..8279516d08 100644 --- a/dimos/robot/unitree_webrtc/modular/connection_module.py +++ b/dimos/robot/unitree_webrtc/modular/connection_module.py @@ -40,7 +40,7 @@ from dimos.utils.logging_config import setup_logger from dimos.utils.testing import TimedSensorReplay, TimedSensorStorage -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_go2", level=logging.INFO) +logger = setup_logger(level=logging.INFO) # Suppress verbose loggers logging.getLogger("aiortc.codecs.h264").setLevel(logging.ERROR) diff --git a/dimos/robot/unitree_webrtc/modular/ivan_unitree.py b/dimos/robot/unitree_webrtc/modular/ivan_unitree.py index 5a382ac2d8..9c79274eb2 100644 --- a/dimos/robot/unitree_webrtc/modular/ivan_unitree.py +++ b/dimos/robot/unitree_webrtc/modular/ivan_unitree.py @@ -28,7 +28,7 @@ from dimos.robot.unitree_webrtc.modular.connection_module import ConnectionModule from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_go2", level=logging.INFO) +logger = setup_logger(level=logging.INFO) def detection_unitree() -> None: diff --git a/dimos/robot/unitree_webrtc/mujoco_connection.py b/dimos/robot/unitree_webrtc/mujoco_connection.py index 018c72a110..a214182925 100644 --- a/dimos/robot/unitree_webrtc/mujoco_connection.py +++ b/dimos/robot/unitree_webrtc/mujoco_connection.py @@ -44,7 +44,7 @@ ODOM_FREQUENCY = 50 -logger = setup_logger(__file__) +logger = setup_logger() T = TypeVar("T") diff --git a/dimos/robot/unitree_webrtc/rosnav.py b/dimos/robot/unitree_webrtc/rosnav.py index b3b8ede190..34e33a9b52 100644 --- a/dimos/robot/unitree_webrtc/rosnav.py +++ b/dimos/robot/unitree_webrtc/rosnav.py @@ -22,7 +22,7 @@ from dimos.msgs.std_msgs.Bool import Bool from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.unitree_webrtc.nav_bot", level=logging.INFO) +logger = setup_logger(level=logging.INFO) # TODO: Remove, deprecated diff --git a/dimos/robot/unitree_webrtc/unitree_b1/connection.py b/dimos/robot/unitree_webrtc/unitree_b1/connection.py index 60e32b4dfa..8a819eefce 100644 --- a/dimos/robot/unitree_webrtc/unitree_b1/connection.py +++ b/dimos/robot/unitree_webrtc/unitree_b1/connection.py @@ -33,7 +33,7 @@ from .b1_command import B1Command # Setup logger with DEBUG level for troubleshooting -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_b1.connection", level=logging.DEBUG) +logger = setup_logger(level=logging.DEBUG) class RobotMode: diff --git a/dimos/robot/unitree_webrtc/unitree_b1/unitree_b1.py b/dimos/robot/unitree_webrtc/unitree_b1/unitree_b1.py index 185b28a7ab..cf6df79f06 100644 --- a/dimos/robot/unitree_webrtc/unitree_b1/unitree_b1.py +++ b/dimos/robot/unitree_webrtc/unitree_b1/unitree_b1.py @@ -53,7 +53,7 @@ ROSTFMessage = None # type: ignore[assignment, misc] ROS_AVAILABLE = False -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_b1", level=logging.INFO) +logger = setup_logger(level=logging.INFO) class UnitreeB1(Robot, Resource): diff --git a/dimos/robot/unitree_webrtc/unitree_g1_blueprints.py b/dimos/robot/unitree_webrtc/unitree_g1_blueprints.py index 8f8f480ada..0ebceac51e 100644 --- a/dimos/robot/unitree_webrtc/unitree_g1_blueprints.py +++ b/dimos/robot/unitree_webrtc/unitree_g1_blueprints.py @@ -20,7 +20,7 @@ """ from dimos_lcm.foxglove_msgs import SceneUpdate # type: ignore[import-untyped] -from dimos_lcm.foxglove_msgs.ImageAnnotations import ( +from dimos_lcm.foxglove_msgs.ImageAnnotations import ( # type: ignore[import-untyped] ImageAnnotations, ) from dimos_lcm.sensor_msgs import CameraInfo # type: ignore[import-untyped] diff --git a/dimos/robot/unitree_webrtc/unitree_g1_skill_container.py b/dimos/robot/unitree_webrtc/unitree_g1_skill_container.py index 12635f02bc..7b1b0757e0 100644 --- a/dimos/robot/unitree_webrtc/unitree_g1_skill_container.py +++ b/dimos/robot/unitree_webrtc/unitree_g1_skill_container.py @@ -25,7 +25,7 @@ from dimos.protocol.skill.skill import skill from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_g1_skill_container") +logger = setup_logger() # G1 Arm Actions - all use api_id 7106 on topic "rt/api/arm/request" G1_ARM_CONTROLS = [ diff --git a/dimos/robot/unitree_webrtc/unitree_skill_container.py b/dimos/robot/unitree_webrtc/unitree_skill_container.py index e346849c1f..9501d037df 100644 --- a/dimos/robot/unitree_webrtc/unitree_skill_container.py +++ b/dimos/robot/unitree_webrtc/unitree_skill_container.py @@ -32,7 +32,7 @@ if TYPE_CHECKING: from dimos.core.rpc_client import RpcCall -logger = setup_logger("dimos.robot.unitree_webrtc.unitree_skill_container") +logger = setup_logger() _UNITREE_COMMANDS = { diff --git a/dimos/robot/utils/robot_debugger.py b/dimos/robot/utils/robot_debugger.py index 3d189abb1e..62202620a6 100644 --- a/dimos/robot/utils/robot_debugger.py +++ b/dimos/robot/utils/robot_debugger.py @@ -17,7 +17,7 @@ from dimos.core.resource import Resource from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class RobotDebugger(Resource): diff --git a/dimos/simulation/mujoco/mujoco_process.py b/dimos/simulation/mujoco/mujoco_process.py index e5a9b30569..dd98a283da 100755 --- a/dimos/simulation/mujoco/mujoco_process.py +++ b/dimos/simulation/mujoco/mujoco_process.py @@ -45,7 +45,7 @@ from dimos.simulation.mujoco.shared_memory import ShmReader from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() class MockController: diff --git a/dimos/simulation/mujoco/shared_memory.py b/dimos/simulation/mujoco/shared_memory.py index 3398f4e01a..ba555574ce 100644 --- a/dimos/simulation/mujoco/shared_memory.py +++ b/dimos/simulation/mujoco/shared_memory.py @@ -25,7 +25,7 @@ from dimos.simulation.mujoco.constants import VIDEO_HEIGHT, VIDEO_WIDTH from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() # Video buffer: VIDEO_WIDTH x VIDEO_HEIGHT x 3 RGB _video_size = VIDEO_WIDTH * VIDEO_HEIGHT * 3 diff --git a/dimos/skills/kill_skill.py b/dimos/skills/kill_skill.py index f3f7687c43..96973105ad 100644 --- a/dimos/skills/kill_skill.py +++ b/dimos/skills/kill_skill.py @@ -24,7 +24,7 @@ from dimos.skills.skills import AbstractSkill, SkillLibrary from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.skills.kill_skill") +logger = setup_logger() class KillSkill(AbstractSkill): diff --git a/dimos/skills/manipulation/force_constraint_skill.py b/dimos/skills/manipulation/force_constraint_skill.py index 294be6782d..2002dc25df 100644 --- a/dimos/skills/manipulation/force_constraint_skill.py +++ b/dimos/skills/manipulation/force_constraint_skill.py @@ -20,7 +20,7 @@ from dimos.utils.logging_config import setup_logger # Initialize logger -logger = setup_logger("dimos.skills.force_constraint_skill") +logger = setup_logger() class ForceConstraintSkill(AbstractManipulationSkill): diff --git a/dimos/skills/manipulation/manipulate_skill.py b/dimos/skills/manipulation/manipulate_skill.py index 896ba7c584..69da5c162c 100644 --- a/dimos/skills/manipulation/manipulate_skill.py +++ b/dimos/skills/manipulation/manipulate_skill.py @@ -28,7 +28,7 @@ from dimos.utils.logging_config import setup_logger # Initialize logger -logger = setup_logger("dimos.skills.manipulate_skill") +logger = setup_logger() class Manipulate(AbstractManipulationSkill): diff --git a/dimos/skills/manipulation/pick_and_place.py b/dimos/skills/manipulation/pick_and_place.py index 3b7dd808c6..3af734f07e 100644 --- a/dimos/skills/manipulation/pick_and_place.py +++ b/dimos/skills/manipulation/pick_and_place.py @@ -31,7 +31,7 @@ from dimos.skills.skills import AbstractRobotSkill from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.skills.manipulation.pick_and_place") +logger = setup_logger() def parse_qwen_points_response(response: str) -> tuple[tuple[int, int], tuple[int, int]] | None: diff --git a/dimos/skills/manipulation/rotation_constraint_skill.py b/dimos/skills/manipulation/rotation_constraint_skill.py index e7291d658d..06de831d32 100644 --- a/dimos/skills/manipulation/rotation_constraint_skill.py +++ b/dimos/skills/manipulation/rotation_constraint_skill.py @@ -22,7 +22,7 @@ from dimos.utils.logging_config import setup_logger # Initialize logger -logger = setup_logger("dimos.skills.rotation_constraint_skill") +logger = setup_logger() class RotationConstraintSkill(AbstractManipulationSkill): diff --git a/dimos/skills/manipulation/translation_constraint_skill.py b/dimos/skills/manipulation/translation_constraint_skill.py index f88fc519b4..088214e4fc 100644 --- a/dimos/skills/manipulation/translation_constraint_skill.py +++ b/dimos/skills/manipulation/translation_constraint_skill.py @@ -21,7 +21,7 @@ from dimos.utils.logging_config import setup_logger # Initialize logger -logger = setup_logger("dimos.skills.translation_constraint_skill") +logger = setup_logger() class TranslationConstraintSkill(AbstractManipulationSkill): diff --git a/dimos/skills/speak.py b/dimos/skills/speak.py index d1a774795e..87cc336d87 100644 --- a/dimos/skills/speak.py +++ b/dimos/skills/speak.py @@ -23,7 +23,7 @@ from dimos.skills.skills import AbstractSkill from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.skills.speak") +logger = setup_logger() # Global lock to prevent multiple simultaneous audio playbacks _audio_device_lock = threading.RLock() diff --git a/dimos/skills/unitree/unitree_speak.py b/dimos/skills/unitree/unitree_speak.py index dbf936efa3..6956efad7a 100644 --- a/dimos/skills/unitree/unitree_speak.py +++ b/dimos/skills/unitree/unitree_speak.py @@ -28,7 +28,7 @@ from dimos.skills.skills import AbstractRobotSkill from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.skills.unitree.unitree_speak") +logger = setup_logger() # Audio API constants (from go2_webrtc_driver) AUDIO_API = { diff --git a/dimos/skills/visual_navigation_skills.py b/dimos/skills/visual_navigation_skills.py index 22fbe9c40e..d959a2561c 100644 --- a/dimos/skills/visual_navigation_skills.py +++ b/dimos/skills/visual_navigation_skills.py @@ -30,7 +30,7 @@ from dimos.types.vector import Vector from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.skills.visual_navigation", level=logging.DEBUG) +logger = setup_logger(level=logging.DEBUG) class FollowHuman(AbstractRobotSkill): diff --git a/dimos/stream/audio/node_key_recorder.py b/dimos/stream/audio/node_key_recorder.py index 8d1f1864f2..8a642c61f5 100644 --- a/dimos/stream/audio/node_key_recorder.py +++ b/dimos/stream/audio/node_key_recorder.py @@ -25,7 +25,7 @@ from dimos.stream.audio.base import AbstractAudioTransform, AudioEvent from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.audio.key_recorder") +logger = setup_logger() class KeyRecorder(AbstractAudioTransform): diff --git a/dimos/stream/audio/node_microphone.py b/dimos/stream/audio/node_microphone.py index 144d809db1..54705caf81 100644 --- a/dimos/stream/audio/node_microphone.py +++ b/dimos/stream/audio/node_microphone.py @@ -26,7 +26,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.audio.node_microphone") +logger = setup_logger() class SounddeviceAudioSource(AbstractAudioEmitter): diff --git a/dimos/stream/audio/node_normalizer.py b/dimos/stream/audio/node_normalizer.py index 5de83ddb21..1386d265b1 100644 --- a/dimos/stream/audio/node_normalizer.py +++ b/dimos/stream/audio/node_normalizer.py @@ -28,7 +28,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.node_normalizer") +logger = setup_logger() class AudioNormalizer(AbstractAudioTransform): diff --git a/dimos/stream/audio/node_output.py b/dimos/stream/audio/node_output.py index 430490671f..ca48961d17 100644 --- a/dimos/stream/audio/node_output.py +++ b/dimos/stream/audio/node_output.py @@ -24,7 +24,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.node_output") +logger = setup_logger() class SounddeviceAudioOutput(AbstractAudioTransform): diff --git a/dimos/stream/audio/node_simulated.py b/dimos/stream/audio/node_simulated.py index 63cd5a43ea..f3bb182b4c 100644 --- a/dimos/stream/audio/node_simulated.py +++ b/dimos/stream/audio/node_simulated.py @@ -24,7 +24,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.node_simulated") +logger = setup_logger() class SimulatedAudioSource(AbstractAudioEmitter): # type: ignore[misc] diff --git a/dimos/stream/audio/node_volume_monitor.py b/dimos/stream/audio/node_volume_monitor.py index 0c15492cdb..8c485f9376 100644 --- a/dimos/stream/audio/node_volume_monitor.py +++ b/dimos/stream/audio/node_volume_monitor.py @@ -23,7 +23,7 @@ from dimos.stream.audio.volume import calculate_peak_volume from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.node_volume_monitor") +logger = setup_logger() class VolumeMonitorNode(AbstractAudioConsumer, AbstractTextEmitter): diff --git a/dimos/stream/audio/stt/node_whisper.py b/dimos/stream/audio/stt/node_whisper.py index 56230329e1..aaab033d0a 100644 --- a/dimos/stream/audio/stt/node_whisper.py +++ b/dimos/stream/audio/stt/node_whisper.py @@ -25,7 +25,7 @@ from dimos.stream.audio.text.base import AbstractTextEmitter from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.stt.node_whisper") +logger = setup_logger() class WhisperNode(AbstractAudioConsumer, AbstractTextEmitter): diff --git a/dimos/stream/audio/text/node_stdout.py b/dimos/stream/audio/text/node_stdout.py index 0f39eb2b8d..389523b375 100644 --- a/dimos/stream/audio/text/node_stdout.py +++ b/dimos/stream/audio/text/node_stdout.py @@ -18,7 +18,7 @@ from dimos.stream.audio.text.base import AbstractTextConsumer from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.text.node_stdout") +logger = setup_logger() class TextPrinterNode(AbstractTextConsumer): diff --git a/dimos/stream/audio/tts/node_openai.py b/dimos/stream/audio/tts/node_openai.py index 42b7e3b1ea..c7d67c0204 100644 --- a/dimos/stream/audio/tts/node_openai.py +++ b/dimos/stream/audio/tts/node_openai.py @@ -29,7 +29,7 @@ from dimos.stream.audio.text.base import AbstractTextConsumer, AbstractTextEmitter from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.stream.audio.tts.openai") +logger = setup_logger() class Voice(str, Enum): diff --git a/dimos/stream/audio/tts/node_pytts.py b/dimos/stream/audio/tts/node_pytts.py index aa4dc387bc..30b940b85b 100644 --- a/dimos/stream/audio/tts/node_pytts.py +++ b/dimos/stream/audio/tts/node_pytts.py @@ -19,7 +19,7 @@ from dimos.stream.audio.text.abstract import AbstractTextTransform # type: ignore[import-untyped] from dimos.utils.logging_config import setup_logger -logger = setup_logger(__name__) +logger = setup_logger() class PyTTSNode(AbstractTextTransform): # type: ignore[misc] diff --git a/dimos/stream/rtsp_video_provider.py b/dimos/stream/rtsp_video_provider.py index c2952b6d80..229e710d8f 100644 --- a/dimos/stream/rtsp_video_provider.py +++ b/dimos/stream/rtsp_video_provider.py @@ -31,7 +31,7 @@ # Assuming AbstractVideoProvider and exceptions are in the sibling file from .video_provider import AbstractVideoProvider, VideoFrameError, VideoSourceError -logger = setup_logger("dimos.stream.rtsp_video_provider") +logger = setup_logger() class RtspVideoProvider(AbstractVideoProvider): diff --git a/dimos/types/timestamped.py b/dimos/types/timestamped.py index 8dfd5299d5..d5aebe072c 100644 --- a/dimos/types/timestamped.py +++ b/dimos/types/timestamped.py @@ -27,7 +27,7 @@ from dimos.types.weaklist import WeakList from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.timestampAlignment") +logger = setup_logger() # any class that carries a timestamp should inherit from this # this allows us to work with timeseries in consistent way, allign messages, replay etc diff --git a/dimos/utils/logging_config.py b/dimos/utils/logging_config.py index e12b1e4828..d846342359 100644 --- a/dimos/utils/logging_config.py +++ b/dimos/utils/logging_config.py @@ -12,85 +12,223 @@ # See the License for the specific language governing permissions and # limitations under the License. -"""Logging configuration module with color support. - -This module sets up a logger with color output for different log levels. -""" - +from collections.abc import Mapping +from datetime import datetime +import inspect import logging +import logging.handlers import os +from pathlib import Path +import sys +import tempfile +import traceback +from types import TracebackType +from typing import Any -import colorlog +import structlog +from structlog.processors import CallsiteParameter, CallsiteParameterAdder -logging.basicConfig(format="%(name)s - %(levelname)s - %(message)s") +from dimos.constants import DIMOS_LOG_DIR, DIMOS_PROJECT_ROOT +# Suppress noisy loggers logging.getLogger("aiortc.codecs.h264").setLevel(logging.ERROR) logging.getLogger("lcm_foxglove_bridge").setLevel(logging.ERROR) logging.getLogger("websockets.server").setLevel(logging.ERROR) logging.getLogger("FoxgloveServer").setLevel(logging.ERROR) logging.getLogger("asyncio").setLevel(logging.ERROR) +_LOG_FILE_PATH = None -def setup_logger( - name: str, level: int | None = None, log_format: str | None = None -) -> logging.Logger: - """Set up a logger with color output. + +def _get_log_directory() -> Path: + # Check if running from a git repository + if (DIMOS_PROJECT_ROOT / ".git").exists(): + log_dir = DIMOS_LOG_DIR + else: + # Running from an installed package - use XDG_STATE_HOME + xdg_state_home = os.getenv("XDG_STATE_HOME") + if xdg_state_home: + log_dir = Path(xdg_state_home) / "dimos" / "logs" + else: + log_dir = Path.home() / ".local" / "state" / "dimos" / "logs" + + try: + log_dir.mkdir(parents=True, exist_ok=True) + except (PermissionError, OSError): + log_dir = Path(tempfile.gettempdir()) / "dimos" / "logs" + log_dir.mkdir(parents=True, exist_ok=True) + + return log_dir + + +def _get_log_file_path() -> Path: + log_dir = _get_log_directory() + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + pid = os.getpid() + return log_dir / f"dimos_{timestamp}_{pid}.jsonl" + + +def _configure_structlog() -> Path: + global _LOG_FILE_PATH + + if _LOG_FILE_PATH: + return _LOG_FILE_PATH + + _LOG_FILE_PATH = _get_log_file_path() + + shared_processors: list[Any] = [ + structlog.stdlib.add_log_level, + structlog.stdlib.add_logger_name, + structlog.stdlib.PositionalArgumentsFormatter(), + structlog.processors.TimeStamper(fmt="iso"), + structlog.processors.StackInfoRenderer(), + structlog.processors.UnicodeDecoder(), + CallsiteParameterAdder( + parameters=[ + CallsiteParameter.FUNC_NAME, + CallsiteParameter.LINENO, + ] + ), + structlog.processors.format_exc_info, # Add this to format exception info + ] + + structlog.configure( + processors=[ + structlog.stdlib.filter_by_level, + *shared_processors, + structlog.stdlib.ProcessorFormatter.wrap_for_formatter, + ], + context_class=dict, + logger_factory=structlog.stdlib.LoggerFactory(), + cache_logger_on_first_use=True, + ) + + return _LOG_FILE_PATH + + +def setup_logger(*, level: int | None = None) -> Any: + """Set up a structured logger using structlog. Args: - name: The name of the logger. - level: The logging level (e.g., logging.INFO, logging.DEBUG). - If None, will use DIMOS_LOG_LEVEL env var or default to INFO. - log_format: Optional custom log format. + level: The logging level. Returns: - A configured logger instance. + A configured structlog logger instance. """ + + caller_frame = inspect.stack()[1] + name = caller_frame.filename + + # Convert absolute path to relative path + try: + name = str(Path(name).relative_to(DIMOS_PROJECT_ROOT)) + except (ValueError, TypeError): + pass + + log_file_path = _configure_structlog() + if level is None: - # Get level from environment variable or default to INFO level_name = os.getenv("DIMOS_LOG_LEVEL", "INFO") level = getattr(logging, level_name) - if log_format is None: - log_format = "%(log_color)s%(asctime)s - %(name)s - %(levelname)s - %(message)s" - - try: - # Get or create logger - logger = logging.getLogger(name) - - # Remove any existing handlers to avoid duplicates - if logger.hasHandlers(): - logger.handlers.clear() - - # Set logger level first - logger.setLevel(level) - - # Ensure we're not blocked by parent loggers - logger.propagate = False - - # Create and configure handler - handler = colorlog.StreamHandler() - handler.setLevel(level) # Explicitly set handler level - formatter = colorlog.ColoredFormatter( - log_format, - log_colors={ - "DEBUG": "cyan", - "INFO": "green", - "WARNING": "yellow", - "ERROR": "red", - "CRITICAL": "bold_red", - }, + stdlib_logger = logging.getLogger(name) + + # Remove any existing handlers. + if stdlib_logger.hasHandlers(): + stdlib_logger.handlers.clear() + + stdlib_logger.setLevel(level) + stdlib_logger.propagate = False + + # Create console handler with pretty formatting. + # We use exception_formatter=None because we handle exceptions + # separately with Rich in the global exception handler + + console_renderer = structlog.dev.ConsoleRenderer( + colors=True, + pad_event=60, + force_colors=False, + sort_keys=True, + # Don't format exceptions in console logs + exception_formatter=None, # type: ignore[arg-type] + ) + + # Wrapper to remove callsite info and exception details before rendering to console. + def console_processor_without_callsite( + logger: Any, method_name: str, event_dict: Mapping[str, Any] + ) -> str: + event_dict = dict(event_dict) + # Remove callsite info + event_dict.pop("func_name", None) + event_dict.pop("lineno", None) + # Remove exception fields since we handle them with Rich + event_dict.pop("exception", None) + event_dict.pop("exc_info", None) + event_dict.pop("exception_type", None) + event_dict.pop("exception_message", None) + event_dict.pop("traceback_lines", None) + return console_renderer(logger, method_name, event_dict) + + console_handler = logging.StreamHandler(sys.stdout) + console_handler.setLevel(level) + console_formatter = structlog.stdlib.ProcessorFormatter( + processor=console_processor_without_callsite, + ) + console_handler.setFormatter(console_formatter) + stdlib_logger.addHandler(console_handler) + + # Create rotating file handler with JSON formatting. + file_handler = logging.handlers.RotatingFileHandler( + log_file_path, + mode="a", + maxBytes=10 * 1024 * 1024, # 10MiB + backupCount=20, + encoding="utf-8", + ) + file_handler.setLevel(level) + file_formatter = structlog.stdlib.ProcessorFormatter( + processor=structlog.processors.JSONRenderer(), + ) + file_handler.setFormatter(file_formatter) + stdlib_logger.addHandler(file_handler) + + return structlog.get_logger(name) + + +def setup_exception_handler() -> None: + def handle_exception( + exc_type: type[BaseException], + exc_value: BaseException, + exc_traceback: TracebackType | None, + ) -> None: + # Don't log KeyboardInterrupt + if issubclass(exc_type, KeyboardInterrupt): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + return + + # Get a logger for uncaught exceptions + logger = setup_logger() + + # Log the exception with full traceback to JSON + logger.error( + "Uncaught exception occurred", + exc_info=(exc_type, exc_value, exc_traceback), + exception_type=exc_type.__name__, + exception_message=str(exc_value), + traceback_lines=traceback.format_exception(exc_type, exc_value, exc_traceback), ) - handler.setFormatter(formatter) - logger.addHandler(handler) - - return logger - except Exception as e: - logging.error(f"Failed to set up logger: {e}") - raise + # Still display the exception nicely on console using Rich if available + try: + from rich.console import Console + from rich.traceback import Traceback -# Initialize the logger for this module using environment variable -logger = setup_logger(__name__) + console = Console() + tb = Traceback.from_exception(exc_type, exc_value, exc_traceback) + console.print(tb) + except ImportError: + # Fall back to standard exception display if Rich is not available + sys.__excepthook__(exc_type, exc_value, exc_traceback) -# Example usage: -# logger.debug("This is a debug message") + # Set our custom exception handler + sys.excepthook = handle_exception diff --git a/dimos/utils/monitoring.py b/dimos/utils/monitoring.py index 1a6f119851..68cc0ebb33 100644 --- a/dimos/utils/monitoring.py +++ b/dimos/utils/monitoring.py @@ -32,7 +32,7 @@ from dimos.utils.actor_registry import ActorRegistry from dimos.utils.logging_config import setup_logger -logger = setup_logger(__file__) +logger = setup_logger() def print_data_table(data) -> None: # type: ignore[no-untyped-def] diff --git a/dimos/utils/threadpool.py b/dimos/utils/threadpool.py index 45625e9980..0a6c6da451 100644 --- a/dimos/utils/threadpool.py +++ b/dimos/utils/threadpool.py @@ -23,7 +23,9 @@ from reactivex.scheduler import ThreadPoolScheduler -from .logging_config import logger +from .logging_config import setup_logger + +logger = setup_logger() def get_max_workers() -> int: diff --git a/dimos/web/websocket_vis/websocket_vis_module.py b/dimos/web/websocket_vis/websocket_vis_module.py index f39fb745df..2aec94067e 100644 --- a/dimos/web/websocket_vis/websocket_vis_module.py +++ b/dimos/web/websocket_vis/websocket_vis_module.py @@ -39,7 +39,7 @@ from .optimized_costmap import OptimizedCostmapEncoder -logger = setup_logger("dimos.web.websocket_vis") +logger = setup_logger() class WebsocketVisModule(Module): diff --git a/docker/navigation/README.md b/docker/navigation/README.md index 87c5b6e788..50276a6cf6 100644 --- a/docker/navigation/README.md +++ b/docker/navigation/README.md @@ -7,25 +7,12 @@ This directory contains Docker configuration files to run DimOS and the ROS auto **For fresh Ubuntu systems**, use the automated setup script: ```bash -curl -fsSL https://raw.githubusercontent.com/dimensionalOS/dimos/dimos-rosnav-docker/docker/navigation/setup.sh | bash -``` - -Or download and run locally: - -```bash -wget https://raw.githubusercontent.com/dimensionalOS/dimos/dimos-rosnav-docker/docker/navigation/setup.sh -chmod +x setup.sh -./setup.sh +wget https://raw.githubusercontent.com/dimensionalOS/dimos/refs/heads/dev/docker/navigation/setup.sh?token=GHSAT0AAAAAADHM56ULLVHMU72XDZSKOZAM2ISY24A +bash setup.sh ``` **Installation time:** Approximately 20-30 minutes depending on your internet connection. -**After installation, start the demo:** -```bash -cd ~/dimos/docker/navigation -./start.sh --all -``` - **Options:** ```bash ./setup.sh --help # Show all options diff --git a/pyproject.toml b/pyproject.toml index 815b21008d..4b80d6c6f6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,6 +46,7 @@ dependencies = [ "asyncio==3.4.3", "go2-webrtc-connect @ git+https://github.com/dimensionalOS/go2_webrtc_connect.git", "tensorzero==2025.7.5", + "structlog>=25.5.0,<26", # Web Extensions "fastapi>=0.115.6", diff --git a/tests/test_manipulation_agent.py b/tests/test_manipulation_agent.py index bd09b23b5e..7651d38fef 100644 --- a/tests/test_manipulation_agent.py +++ b/tests/test_manipulation_agent.py @@ -35,7 +35,7 @@ from dimos.web.robot_web_interface import RobotWebInterface # Initialize logger for the agent module -logger = setup_logger("dimos.tests.test_manipulation_agent") +logger = setup_logger() # Load API key from environment load_dotenv() diff --git a/tests/test_manipulation_pipeline_single_frame.py b/tests/test_manipulation_pipeline_single_frame.py index c29b2b2607..bbf2d5220f 100644 --- a/tests/test_manipulation_pipeline_single_frame.py +++ b/tests/test_manipulation_pipeline_single_frame.py @@ -45,7 +45,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("test_pipeline_viz") +logger = setup_logger() def load_first_frame(data_dir: str): diff --git a/tests/test_manipulation_pipeline_single_frame_lcm.py b/tests/test_manipulation_pipeline_single_frame_lcm.py index 0c2f2bc591..1d2dc1ded7 100644 --- a/tests/test_manipulation_pipeline_single_frame_lcm.py +++ b/tests/test_manipulation_pipeline_single_frame_lcm.py @@ -39,7 +39,7 @@ from dimos.manipulation.manip_aio_processer import ManipulationProcessor from dimos.utils.logging_config import setup_logger -logger = setup_logger("test_pipeline_lcm") +logger = setup_logger() class LCMDataCollector: diff --git a/tests/test_navigate_to_object_robot.py b/tests/test_navigate_to_object_robot.py index ecf4fd4956..44c57011cc 100644 --- a/tests/test_navigate_to_object_robot.py +++ b/tests/test_navigate_to_object_robot.py @@ -23,9 +23,11 @@ from dimos.robot.unitree.unitree_ros_control import UnitreeROSControl from dimos.robot.unitree.unitree_skills import MyUnitreeSkills from dimos.skills.navigation import Navigate -from dimos.utils.logging_config import logger +from dimos.utils.logging_config import setup_logger from dimos.web.robot_web_interface import RobotWebInterface +logger = setup_logger() + def parse_args(): parser = argparse.ArgumentParser(description="Navigate to an object using Qwen vision.") diff --git a/tests/test_navigation_skills.py b/tests/test_navigation_skills.py index 93497de691..b659715e98 100644 --- a/tests/test_navigation_skills.py +++ b/tests/test_navigation_skills.py @@ -40,7 +40,7 @@ from dimos.web.robot_web_interface import RobotWebInterface # Setup logging -logger = setup_logger("simple_navigation_test") +logger = setup_logger() def parse_args(): diff --git a/tests/test_object_tracking_module.py b/tests/test_object_tracking_module.py index 4fc1adac83..24f0b7b675 100755 --- a/tests/test_object_tracking_module.py +++ b/tests/test_object_tracking_module.py @@ -32,7 +32,7 @@ from dimos.robot.foxglove_bridge import FoxgloveBridge from dimos.utils.logging_config import setup_logger -logger = setup_logger("test_object_tracking_module") +logger = setup_logger() # Suppress verbose Foxglove bridge warnings import logging diff --git a/tests/test_person_following_robot.py b/tests/test_person_following_robot.py index f7ee6eaf0d..a9faa663ce 100644 --- a/tests/test_person_following_robot.py +++ b/tests/test_person_following_robot.py @@ -21,9 +21,11 @@ from dimos.robot.unitree.unitree_go2 import UnitreeGo2 from dimos.robot.unitree.unitree_ros_control import UnitreeROSControl from dimos.robot.unitree.unitree_skills import MyUnitreeSkills -from dimos.utils.logging_config import logger +from dimos.utils.logging_config import setup_logger from dimos.web.robot_web_interface import RobotWebInterface +logger = setup_logger() + def main(): # Hardcoded parameters diff --git a/tests/test_pick_and_place_module.py b/tests/test_pick_and_place_module.py index 1bce414a6e..ef1858c6b6 100644 --- a/tests/test_pick_and_place_module.py +++ b/tests/test_pick_and_place_module.py @@ -39,7 +39,7 @@ from dimos.robot.agilex.piper_arm import PiperArmRobot from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.tests.test_pick_and_place_module") +logger = setup_logger() # Global for mouse events mouse_click = None diff --git a/tests/test_pick_and_place_skill.py b/tests/test_pick_and_place_skill.py index 78eeb761fb..95576a40d3 100644 --- a/tests/test_pick_and_place_skill.py +++ b/tests/test_pick_and_place_skill.py @@ -31,7 +31,7 @@ from dimos.skills.manipulation.pick_and_place import PickAndPlace from dimos.utils.logging_config import setup_logger -logger = setup_logger("dimos.robot.agilex.run_robot") +logger = setup_logger() async def run_piper_arm(): diff --git a/tests/test_rtsp_video_provider.py b/tests/test_rtsp_video_provider.py index fb0f075750..a834075619 100644 --- a/tests/test_rtsp_video_provider.py +++ b/tests/test_rtsp_video_provider.py @@ -25,7 +25,7 @@ from dimos.utils.logging_config import setup_logger from dimos.web.robot_web_interface import RobotWebInterface -logger = setup_logger("tests.test_rtsp_video_provider") +logger = setup_logger() import os import sys diff --git a/tests/test_unitree_agent_queries_fastapi.py b/tests/test_unitree_agent_queries_fastapi.py index 0671a53135..e144b8856c 100644 --- a/tests/test_unitree_agent_queries_fastapi.py +++ b/tests/test_unitree_agent_queries_fastapi.py @@ -33,9 +33,11 @@ from dimos.agents.agent import OpenAIAgent from dimos.robot.unitree.unitree_go2 import UnitreeGo2 from dimos.robot.unitree.unitree_skills import MyUnitreeSkills -from dimos.utils.logging_config import logger +from dimos.utils.logging_config import setup_logger from dimos.web.fastapi_server import FastAPIServer +logger = setup_logger() + def main(): # Get environment variables diff --git a/tests/test_zed_module.py b/tests/test_zed_module.py index 03a21ac65d..40c9addce6 100644 --- a/tests/test_zed_module.py +++ b/tests/test_zed_module.py @@ -33,7 +33,7 @@ from dimos.protocol.pubsub.lcmpubsub import LCM, Topic from dimos.utils.logging_config import setup_logger -logger = setup_logger("test_zed_module") +logger = setup_logger() class ZEDVisualizationNode: diff --git a/tests/visualization_script.py b/tests/visualization_script.py index a42b4bf06c..18ddd60eb9 100644 --- a/tests/visualization_script.py +++ b/tests/visualization_script.py @@ -72,7 +72,7 @@ ) from dimos.utils.logging_config import setup_logger -logger = setup_logger("visualization_script") +logger = setup_logger() def create_point_cloud(color_img, depth_img, intrinsics):