파이썬 - uvicorn의 콘솔 출력을 UDP로 전송
(uvicorn과는 다르게) uwsgi의 경우 재미있는 옵션이 하나 있습니다.
Basic logging (connected UDP mode)
; https://uwsgi-docs.readthedocs.io/en/latest/Logging.html#basic-logging-connected-udp-mode
바로 출력 내용을 UDP로 전송하는 "--logto" 옵션인데요,
$ ./uwsgi -s :3031 -w simple_app --logto 192.168.100.50:65000
아쉽게도 저 기능이 uvicorn에는 없습니다. 그래서 처음에는 Python의 Logger를 이용해 보려고 했는데,
파이썬 - uvicorn 사용자 정의 Logger 작성
; https://www.sysnet.pe.kr/2/0/13264
이것도 좀 아쉽습니다. 왜냐하면 print 같은 유의 출력은 Logger 재정의로는 잡을 수 없기 때문입니다. 뭐... 그래도 괜찮습니다.
nc를 이용하면 되는데요,
$ uvicorn --loop asyncio --host 0.0.0.0 --port 3031 main:app | nc -u 192.168.100.50 65000
그런데 위와 같이 했더니 표준 출력은 전송되는 반면 표준 에러는 nc로 전달되지 않습니다. 따라서 그것까지 우회하려면 다음과 같이 추가 처리를 해주면 됩니다. ^^
$ uvicorn --loop asyncio --host 0.0.0.0 --port 3031 main:app 2>&1 | nc -u 192.168.100.50 65000
위와 같이 UDP 전송 처리를 한 경우, 간단하게 서버 측 테스트가 필요하다면 역시나 nc를 이용하면 됩니다.
다음의 옵션은 nc 프로그램을 UDP 서버로 동작시키는데,
$ nc -ul 0.0.0.0 65000
유사한 테스트를 uwsgi를 이용해서도 할 수 있습니다.
$ uwsgi --udp 0.0.0.0:65000
리눅스는 은근히 ^^ 이런 테스트하기가 좋군요.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]