학회_공부해요/기술_스터디

[Plainbit] LogLayer: 개발자를 위한 혁신적인 통합 로깅 라이브러리

yenas0 2025. 1. 26. 15:19
반응형

https://blog.plainbit.co.kr/loglayer-gaebaljareul-wihan-hyeogsinjeogin-tonghab-roging-raibeureori/

 

LogLayer: 개발자를 위한 혁신적인 통합 로깅 라이브러리

안녕하세요, 개발자 여러분! 오늘은 최근 GitHub에서 주목받고 있는 프로젝트인 LogLayer에 대해 상세히 소개해드리고자 합니다. LogLayer는 다양한 로깅 라이브러리와 클라우드 제공업체에 로그를 라

blog.plainbit.co.kr


LogLayer란?

다양한 로깅 라이브러리와 클라우드 제공업체에 로그를 라우팅하는 통합 로거

기존 로깅 라이브러리 들은 각기 다른 API를 가지고 있어서 문제 有 -> 해결하려고 등장

 

LogLayer특징

일관된 API  다양한로깅 라이브러리에 대해 일관된 API 제공 
다중 전송 지원 여러 대상에 동시 로그 전송 가능
유연한 로거 교체 애플리케이션 코드 변경 없이 로깅라이브러리 쉬운 교체  
플러그인 시스템 로그 데이터를 로깅 라이브러리로 전송하기 전에 수정할 수 있는 플러그인 시스템을 제공
표준화된 오류 처리 오류 처리 및 직렬화를 표준화하여 일관된 오류 로깅 가능케함
테스트를 위한 내장 mock 테스트 시 로깅 코드를 쉽게 모의할 수 있는 기능 제공

 

 

LogLayer 작동 방식

전송 시스템 통해 로깅 라이브러리에 대한 어댑터 역할을 함 (다중 전송 지원, 유연한 로거 교체)

실습을 위해.. 구현을 함 해보기

 

LogLayer 구현

pytorch에서 구현할 수 있다.

import torch
import torch.nn as nn

class LogLayer(nn.Module):
    def __init__(self):
        super(LogLayer, self).__init__()

    def forward(self, x):
        # 중간 값을 기록
        print(f"LogLayer - Tensor shape: {x.shape}, values: {x}")
        return x

 

 

사용 예시

모델 정의 시 사용

class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(10, 5)
        self.log1 = LogLayer()  # LogLayer 추가
        self.fc2 = nn.Linear(5, 2)
        self.log2 = LogLayer()  # 또 다른 LogLayer 추가

    def forward(self, x):
        x = self.fc1(x)
        x = self.log1(x)  # 중간 값 확인
        x = self.fc2(x)
        x = self.log2(x)  # 최종 값 확인
        return x

# 모델 인스턴스 생성
model = SimpleModel()

# 입력 데이터
input_tensor = torch.randn(1, 10)  # 1 x 10 크기의 랜덤 텐서
output = model(input_tensor)

 

로그파일 기록 원한다하면

class AdvancedLogLayer(nn.Module):
    def __init__(self, log_to_file=False, file_name="log.txt"):
        super(AdvancedLogLayer, self).__init__()
        self.log_to_file = log_to_file
        self.file_name = file_name

    def forward(self, x):
        log_message = f"AdvancedLogLayer - Tensor shape: {x.shape}, values: {x}\n"
        if self.log_to_file:
            with open(self.file_name, "a") as f:
                f.write(log_message)
        else:
            print(log_message)
        return x

 

 

 

주피터 노트북에서 코드를 돌려서 확인해봤다.

위에처럼 출력됨

 

 

LogLayer와 다른 로깅 라이브러리의 차별점?

- winston과의 비교: 일관된 API, 쉬운 전환성, 강력하고 유연한 기능 제공

- Pino와의 비교: 여러 로깅 대상으로 동시에 로그를 전송할 수 있는 기능을 제공

- Bunyan과의 비교: 다양한 형식과 대상으로 로깅 확장, 강력한 로그 변환 및 처리 기능 제

 

 

LogLayer는 비동기 로깅으로 성능을 최적화하고, 증가하는 로그 볼륨을 효율적으로 처리할 수 있도록 설계되었다.

확장성 측면,, : 다중 로거 지원, 클라우드 통합, 사용자 정의 전송 가능

미래 계획.. : 더 많은 전송 옵션, 성능 최적화, 실시간 로그 분석 기능, 보안 강

 

반응형