ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 로깅 logging 시스템 생성 , 로그 메시지 기록하기
    데이터 분석 공부/파이썬 데이터 분석 2024. 5. 10. 17:49
    728x90

    import logging 을 통해 로거를 사용하여 로그 메시지를 기록할 수 있습니다.

    아래와 같이 기본적인 로깅 시스템을 만들어 봅니다. 

     

    # 로깅 시스템 만들기

    logging.Formatter를 통해 로그 메시지가 기록되는 형식을 지정해줄 수 있습니다.

    Handler 옵션을 통해 로그 메시지를 효과적으로 관리할 수 있도록, 콘솔과 파일 영역을 구분합니다. 

    # 로그 생성
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # console
    s_handler = logging.StreamHandler()
    s_handler.setFormatter(formatter)
    logger.addHandler(s_handler)
    
    # file
    f_handler = logging.FileHandler("./system.log")
    f_handler.setFormatter(formatter)
    logger.addHandler(f_handler)

     

    1. 콘솔(Console):
      • 주로 개발 및 디버깅 목적으로 사용됩니다.
      • 개발 중에는 코드의 실행 상태나 오류 메시지 등을 실시간으로 확인할 수 있어 개발자가 문제를 빠르게 파악하고 디버깅할 수 있습니다.
      • 콘솔을 통한 로그는 보통 개발 환경에서만 보여주고, 운영 환경에는 보이지 않도록 설정되는 경우가 많습니다.
    2. 파일(File):
      • 주로 운영 환경에서 사용됩니다.
      • 파일로 로그를 기록하면 문제가 발생한 경우에도 로그를 추적하고 분석할 수 있습니다.
      • 보안과 오디팅(Auditing)을 위해 파일에 로그를 기록하는 경우가 많습니다.
      • 파일에 로그를 저장함으로써 장애 발생 시에도 중요 정보를 보존하고, 이를 통해 재현과 디버깅을 용이하게 합니다.

    로그를 콘솔과 파일로 동시에 기록하는 경우에는 개발 중에는 실시간으로 로그를 확인하고, 운영 환경에서는 파일에 로그를 저장하여 보관하고 추적할 수 있습니다. 또한, 이러한 설정은 logging 모듈의 다양한 핸들러를 조합하여 로그를 효과적으로 관리할 수 있도록 해줍니다.

     

    # 시스템에 명령어 보내기

    다음으로, 쉘 언어를 쓰지 않고도 시스템에게 명령어를 보내는 방법입니다. 

    이 방법을 응용하면 로그 메시지를 별도로 저장하는 명령어를 보낼 수 있겠네요. 

    # subprocess, shell=True 설정을 통해 쉘 언어 쓰지 않고 시스템에게 명령어 보내기
    # 그 결과를 out에 저장 
    import subprocess 
    out = subprocess.run("echo 'hi' > /root/a.txt", shell=True)
    
    # 테스트 실행
    for i in range(10):
        logger.info(f"순서 {i} ")

     

     

    subprocess.run("echo 'hi' > /root/a.txt", shell=True): 이 부분은 "echo 'hi' > /root/a.txt"라는 셸 명령을 실행합니다.

    이 명령은 텍스트 "hi"를 포함하는 파일을 /root/a.txt 경로에 생성합니다.

    • subprocess.run() 함수는 주어진 명령을 실행하고 완료될 때까지 기다립니다.
    • 첫 번째 인자는 실행할 명령이며, 여기서는 "echo 'hi' > /root/a.txt"입니다.
    • shell=True는 명령을 실행할 때 셸을 사용하도록 지정하는 옵션입니다. 이 옵션이 사용되면 명령을 실행하는 과정에서 셸이 필요한 경우 셸을 호출하여 명령을 실행합니다. 만약 이 옵션이 지정되지 않으면 명령을 직접 실행합니다. 여기서는 셸 명령을 실행하기 때문에 shell=True를 사용하고 있습니다.

     

    # Argument 파싱하기

    argparse.ArgumentParser()는 명령줄 인자를 파싱(parse)하는 데 사용되는 클래스입니다.

    이 클래스를 사용하면 사용자가 스크립트를 실행할 때 명령줄에 전달된 인자(argument)들을 쉽게 처리할 수 있습니다.

    예를 들어, 사용자가 스크립트를 실행할 때 인자를 지정하여 원하는 동작을 실행하도록 할 수 있습니다.

     

    # argument 만들어서 날짜 선택할 수 있게 하기
    # python logging_test.py -d 2024-05-10 와 같은 양식으로 실행할 수 있음 
    
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-d', '--day',  type=str, nargs="+", metavar='N', help="날짜선택")
    args = parser.parse_args()
    logger.info(f'사용자가 입력한 날짜 - {args}')

     

    먼저 argparse.ArgumentParser()를 호출하여 ArgumentParser 객체를 생성합니다.

    이 객체는 명령줄 인자를 파싱하고 처리하는 데 사용됩니다.

    ArgumentParser 객체를 설정하고 인자를 추가한 후,

    parse_args() 메서드를 호출하여 실제로 명령줄 인자를 파싱합니다.

     

     

    댓글

Designed by Tistory.