티스토리 뷰
[Open Source Contribution] YOLOv8(ultralytics/ultralytics) 기여 #8 python logging 그런데 이제 emoji와 windows를 곁들인
developer0hye 2023. 4. 15. 01:14https://github.com/ultralytics/ultralytics/pull/2030
윈도우에서 emoji 가 제대로 출력이 안된다.
YOLOv8(ultralytics/ultralytics) 프로젝트에서는 python 의 logging 라이브러리를 기반으로 log를 출력하는데, Windows OS를 사용한다면 logging 라이브러리에서 emoji로 인하여 warning이나 error 메시지가 출력될 수 있다.
이를 위해 YOLOv8 프로젝트는 emojis 라는 함수를 구현했다. 대충 해석하면 인코딩 한 번 해주고 다시 디코딩하면서 ascii 코덱으로 디코딩하면서 발생하는 에러는 ignore 해주겠다는 의미로 해석된다.
그리고, YOLOv8 프로젝트는 윈도우 OS의 경우 Logger 클래스의 info 함수와 warning 함수에 문자열이 입력되기전에 항상 emojis 함수가 호출되게끔 구현을 했다.
근데 이렇게 구현하면 문제가 발생한다. Logger의 Formatter로 Logger 메시지의 출력 경로(%(pathname)s)와 호출 라인을 출력해보면 어디서 Logger를 호출하든지간에 항상 setattr 해준 파일과 라인이 출력된다.
ChatGPT와 Google을 통해 정보를 수집해보니 Handler 와 Filter를 Custom하게 잘 정의해주면 될것 같았다.
처음에는 Handler 를 손대봤는데 안된다. Handler의 emit 함수가 실행되기이전에 이미 emoji로 포함한 텍스트를 로깅하려는 과정이 어디선가 발생하면서 오류가 발생했다. 그래서, ChatGPT한테 handler 이전에 어떤 함수가 호출되냐고 물어봤더 Filter 클래스의 'filter' 함수가 먼저 호출된단다.
답변 보자마자 이거다 싶었다.
logging.Filter 클래스를 상속받아 새로운 Filter 클래스를 만들었고, record의 msg가 출력되는 혹은 파일에 기록되는 텍스트이기에 이 텍스트에 emojis() 함수를 거치도록 수정하고 return 되는 value는 부모 클래스의 함수에게 결정되도록 디자인했다.
이러면 기존 코드에서 명시적으로 작성해주었던 info, warning말고도 debug, error 등도 알아서 적용된다(해보진 않았지만).
이제 Log에 호출된 파일과 라인이 제대로 출력된다.
cool, awesome, nice 코멘트가 달리니 기분이 좋다.
나보다 더 cool, awesome, nice한 사람이 이런 예외처리 따로 안해줘도 되게 윈도우 os 좀 업데이트 해줬으면 좋겠다.
AI 모델 설계 측면의 지식보다는 python 지식과 테크닉이 늘어나고 있는 것 같다...
'Contribution 일지' 카테고리의 다른 글
- Total
- Today
- Yesterday
- Lowest Common Ancestor
- FairMOT
- 백준 11053
- 백준 1766
- 파이참
- 순열
- 인공지능을 위한 선형대수
- 이분탐색
- cosine
- LCA
- 문제집
- 백준
- MOT
- ㅂ
- 위상 정렬 알고리즘
- 백준 11437
- 가장 긴 증가하는 부분 수열
- 단축키
- C++ Deploy
- PyCharm
- 자료구조
- 조합
- 백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |