본문 바로가기
Developing../Python

로그남기는 법 : Logging wrapper만들기

by bents 2022. 7. 9.

1. 얻고 싶은 로그 형태

Timestamp | function name[=phase level] | { cpu, mem, gpu, start_timestamp }

 

self.token = ''

def log(self):

    check_metrics(self.token + " | " + message)

 

https://florian-dahlitz.de/articles/logging-made-easy-with-loguru

https://loguru.readthedocs.io/en/stable/api/logger.html

 

 

2. 로그 수집 주기

특정 function 실행의 시작~종료기간의 로그를 수집하고 싶다.

function이 실행되면 수집을 시작해서 1초 단위로 수집하다가 종료되면 수집을 중단하고 싶다.

 

=========

방법 못 찾음.. 대안.. 함수의 중요 지점에 log를 찍는다.

from loguru import logger 
import nvidia_smi, psutil
from functools import wraps 

logger.add(f'test-20220706.log', retention="1 days")

def _check_total_metrics(func_name):
    
    metric_dict = {}
    metric_dict['NAME']=func_name

    def _check_gpu_index():
    
        nvidia_smi.nvmlInit()
        handle = nvidia_smi.nvmlDeviceGetHandleByIndex(0)
        info = nvidia_smi.nvmlDeviceGetMemoryInfo(handle)
        nvidia_smi.nvmlShutdown()
        return round(100*info.used/info.total,2)
        
    metric_dict['MEM']=psutil.virtual_memory().percent
    metric_dict['CPU']=psutil.cpu_percent()
    metric_dict['GPU']=_check_gpu_index()
    logger.info(metric_dict)
    
 class Toy():
    def log(self, message, level=3):
        _check_total_metrics(message)
        print(self.__class__.__name__, message)
    
    
    ##result
    ##2022-07-06 21:38:00.420 | INFO     | worker.base_worker:_check_total_metrics:42 
    ##- {'NAME': 'Time: Total 0:00:14.330254 Init 0:00:06.081697 Core 0:00:06.702731 Fin 0:00:01.545826', 'MEM': 63.1, 'CPU': 4.5, 'GPU': 95.67}

 

3. 로그 파일 삭제

https://goateedev.tistory.com/103