[ros2] self.get_logger() 사용법

About_work·2024년 2월 19일
0

ros2

목록 보기
16/41
post-custom-banner

2. self.get_logger() 사용법

  • self.get_logger() 메서드는 ROS 2에서 Python을 사용하여 노드를 개발할 때 로깅을 위해 사용
  • 이 메서드는 노드의 로거 인스턴스를 반환
  • 이를 통해 개발자는 다양한 로그 레벨에서 메시지를 출력할 수 있음

2.1. 사용 가능한 로그 레벨

get_logger()로 반환된 로거 객체는 다음과 같은 여러 로그 레벨을 지원합니다:

  • DEBUG: 개발 중에 유용한 상세 정보를 제공
    • 예를 들어, 변수의 값이나 함수 호출 과정 등을 기록할 때 사용
  • INFO: 일반적인 실행 정보를 제공 (얘가 default)
    • 프로그램의 진행 상황이나 상태 변경 같은 정보를 사용자에게 알릴 때 사용
  • WARN: 잠재적인 문제를 경고
    • 예상치 못한 상황이지만, 프로그램의 실행을 계속할 수 있는 경우에 사용
  • ERROR: 심각한 문제가 발생했음을 나타냄
    • 예를 들어, 예상치 못한 예외가 발생했거나 주요 기능이 실패했을 때 사용
  • FATAL: 치명적인 오류가 발생했음을 나타
    • 이 로그 레벨의 메시지는 시스템이나 애플리케이션이 중단될 정도의 심각한 문제를 의미

2.2. 사용 예시

로거 객체를 사용하여 다양한 로그 레벨에서 메시지를 출력하는 방법은 다음과 같습니다:

self.get_logger().debug('This is a debug message.')
self.get_logger().info('This is an info message.')
self.get_logger().warn('This is a warning message.')
self.get_logger().error('This is an error message.')
self.get_logger().fatal('This is a fatal message.')
  • 일반적으로, 개발 과정에서는 DEBUG 레벨의 로그를 활성화하여 가능한 많은 정보를 얻고,
  • 배포 시에는 INFO 이상의 로그 레벨을 사용하여 필요한 정보만을 기록합니다.

ROS 2에서 self.get_logger()를 사용하여 로깅을 설정하고 관리할 때, 로그 레벨을 설정하고, 로그를 터미널과 파일에 출력하는 방법은 중요한 측면입니다. 다음은 이러한 요구 사항을 충족시키는 방법에 대한 설명입니다:

2.3. 보여줄 로그 레벨을 설정하는 방법

  • 실행 중인 노드에 대한 로그 레벨 매개변수를 설정해야함.
  • 이는 주로 ROS 2 파라미터 서버를 사용하거나, 커맨드 라인 인터페이스를 통해 설정

2.4.0. 파이썬 프로그램 코드 내에서, 직접 설정하는 방법

  • os.environ['RCUTILS_LOGGING_LEVEL'] = 'INFO'

2.4.1. 커맨드 라인을 통한 설정

ros2 run [package_name] [node_name] --ros-args --log-level info

2.4.2. 로깅 구성 파일 사용

  • ROS 2는 로깅 시스템의 구성을 위해, 로깅 구성 파일을 사용할 수 있는 기능을 제공
  • 이는 ros2 launch 명령어를 사용하여 노드를 실행할 때, 특정 환경 변수를 통해 로깅 구성을 지정하는 방식

2.4. 로그를 파일로 저장하는 방법

  • ROS 2에서는 기본적으로 로그 파일 저장 기능을 직접 제공하지 않습니다.

  • 그러나, ROS 2 로그 메시지를 파일로 리디렉션하거나 외부 로깅 프레임워크를 사용하여 로그를 파일로 저장할 수 있음

  • 리디렉션을 통한 저장: 노드를 실행할 때 터미널 출력을 파일로 리디렉션할 수 있습니다. 예를 들어:

    ros2 run [package_name] [node_name] > log.txt

    이 명령은 모든 터미널 출력을 log.txt 파일에 저장합니다.

  • Python 로깅 모듈 사용: Python의 내장 logging 모듈을 사용하여 로그 파일을 관리할 수 있습니다. rclpy의 로거와 별개로 logging 모듈을 설정하여 파일로 로그를 기록할 수 있습니다. 예를 들어:

    import logging
    
    logging.basicConfig(level=logging.INFO, filename='node.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')

    이 코드는 node.log 파일에 로그를 기록하도록 logging 모듈을 설정합니다. basicConfig 메서드를 통해 로그 레벨, 파일 이름, 로그 포맷 등을 지정할 수 있습니다.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.
post-custom-banner

0개의 댓글