์ ์
์ด๊ธด ํ์ง๋ง 6๊ฐ์์ ๊ฒฝ๋ ฅ์ ๊ฐ๊ณ ์๋ค๊ณ ๊ผด์ ์๋งํ๋๋ณด๋คใ
logging ์์คํ
์ ๋ํด ๋๋ฌด ์์ผํ๋ ๊ฑฐ ๊ฐ๋น
๊ทธ๋ํ ๋์๊ฒ log๋ ์ธ๋ถ์ถ๋ ฅํ๋ ๊ฒ์ผ๋ก์ ๋๋ฒ๊ทธํ ๋ ๋ฐ๋ก๋ฐ๋ก ๋ณผ ์ ์๋ ๊ทธ๋ฐ ๊ทธ ์ด์๋ ์ดํ๋ ์๋์๋๋ฐ
์น ๋ฐฑ์๋๋ฅผ ํ๋ค์์ ๊ทธ๋ ๋ค๊ณ ์๊ฐํด๋ณด๊ณ ์ถ๋ค.. ์ฌํผ ํ๋ก๊ทธ๋จ์ ์ค์ํ์ง ์์ ๊ฒ ์๋จ ๊ฒ์ ๊นจ๋ฌ์๋ค.
3๋ ํ์ธ ์ง๊ธ ์ด ๊ธ์ ์ฝ์ผ๋๊น ๋๋ฌด ์ฐฝํผํ๋ค ํํ^^..
๋ก๊ทธ๋ ๊ต์ฅํ ์ค์ํ๋ฏ๋ก ๋ชฐ๋๋ ๋ด ์์ ์ด ์๋ชป๋ ๊ฒ์ด๋ค
ํ์ด์ฌ์์ ์ฝ์ ์ถ๋ ฅ๋ฐฉ๋ฒ์ print() ์ด๋ ๊ฒ ์ฐ๋ฉด๋๋๋ฐ,
๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ logging ์ ์ฐ๋ฉด ๋ก๊ทธ๋ก์จ ๊ด๋ฆฌ๊ฐ ๋๋ค. logging.error("์๋ฌ๋ฉ์ธ์ง") ์ด๋ฐ์์ผ๋ก ์ฐ๋ฉด ๋๋ค.
๋ก๊น ๋ ๋ฒจ
๋ก๊น ์๋ print()์๋ ๋ฌ๋ฆฌ ๋ก๊ทธ์ ๋ ๋ฒจ์ด ์๋ค. DEBUG, INFO, WARNING, ERROR, CRITICAL 5๊ฐ์ง ๋ฑ๊ธ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
๋ก๊น ๋ ๋ฒจ์ ์ถ๋ ฅ ์กฐ๊ฑด์ ๋จน์ฌ์ ํ๋ก๊ทธ๋จ์ ๋ถ๋ด์ ์ค์ฌ์ฃผ๋ ์ญํ ์ ์ฃผ๋ก ํ๋ค.
IoT์ ํ๋ธ ์ญํ ์ ํ๋ ๋ชจ๋์ ๋ฐ์ดํฐ ์ฌ์ฉ๋์ ์ค์ด๊ธฐ ์ํด INFO ๋ ๋ฒจ๋ณด๋ค ์ฌ๊ฐํ ๊ฒ๋ง ์ถ๋ ฅํ๊ฒ ํ๋ผ๊ณ ํ๋ ์์ผ๋ก ์ค์ ํด์ ์ฐ๋ฉด ๋๋๊ฒ์ด๋ค.
์ด๊ฒ ๋ง๊ณ ๋ ์ถ๋ ฅํ ๋ก๊ทธ๋ฅผ ํ์ผ๋ก ์ ์ฅ์ ํ๊ฒ ๋๋ ์ํฉ์์๋ ์ฉ๋์ ๋ง์ด ์ก์๋จน์ด ์์คํ ์ด ๋ฉ์ถ์๋ ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ชจ๋ก ์ธ๋ชจ ์๋ค.
ํ์ด์ฌ ๋ก๊น
์ ๊ธฐ๋ณธ ์ค์ ์ WARNING ์ด๋ค. DEBUG < INFO < WARNING < ERROR < CRITICAL ์ด ์์๋ผ์ INFO๋ ๋ฒจ๊ณผ DEBUG ๋ ๋ฒจ์ ์ถ๋ ฅ์ด ์๋๋ค. ์ถ๋ ฅํด์ ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ฐ๋ก ์ค์ ์ ํด์ผํ๋ค.
๋ก๊ฑฐ ์ค์ ํ๊ธฐ
1. ๋ก๊น ๋ชจ๋ ์์ฑํ๊ธฐ
- logger = logging.getLogger("logger name")
2. ๋ ๋ฒจ ์ค์ ํ๊ธฐ
- logger.setLevel(logging.DEBUG)
3. ํธ๋ค๋ฌ ์ค์ ํ๊ธฐ
stream handler๋ ์ฝ์์ฐฝ์ ์ถ๋ ฅํ๊ฒํ๋ ํธ๋ค๋ฌ
- stream_handler = logging.StreamHandler()
- logger.addHandler(stream_handler)
4. ํ์ผ ํธ๋ค๋ฌ ์ค์ ํ๊ธฐ
- file_handler = logging.FileHandler(filename, mode='a', encoding=None, delay=False)
ํ์ผ ์ด๋ฆ์ ๋ฆฌ๋ ์ค ๋ก๊ทธํ์ผ ์์น๋ฅผ ์ฐ๋ฉด ๊ทธ์๋ฆฌ์ ์ค์ ํ logger name์ผ๋ก ํ์ผ ์์ฑ๋จ
a ๋ชจ๋๋ ๊ธฐ์กด ํ์ผ์ ์ด์ด์ ๊ธฐ๋ก, w๋ชจ๋๋ ๊ธฐ์กด ํ์ผ ๋ด์ฉ์ ์ญ์ ํ๊ณ ์๋ก ์์ฑ
- logger.addHandler(file_handler)
5. ์ถ๋ ฅ ํฌ๋งคํ ์ค์ ํ๊ธฐ
- formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] -- %(message)s (%(filename)s:%(lineno)s)')
asctime ์๊ฐ
filename ํ์ผ์ด๋ฆ
levelname ๋ก๊น
๋ ๋ฒจ
message ๋ฉ์ธ์ง
lineno ์ถ๋ ฅ๋ผ์ธ ๋๋ฒ
๊ทธ ์ธ์ formatter keywords๋ ํ์ด์ฌ ๋งค๋ด์ผ์ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- stream_handler.setFormatter(formatter)
- file_handler.setFormatter(fomatter)
์ด๋ฐ์์ผ๋ก ํฌ๋งคํฐ๋ฅผ ํ๋ ์ ์ธํ๊ณ , ํธ๋ค๋ฌ์ ์ ์ฉ์์ผ์ฃผ๋ฉด ๋๋ค.
๊ทธ ์ธ์ ์๋ฉด ์ข์ ๊ฒ๋ค
1. RotatingFileHandler
- ํ์ผ์ ์ต๋ ํฌ๊ธฐ ๋ฐ ์๋ก์ด ํ์ผ์ ์์ฑํ ๋ ์ต๋ ๊ฐฏ์๋ฅผ ์ง์ ํ๋ค.
- file_handler = logging.handlers.RotatingFileHandler(filename="๋ฆฌ๋ ์ค ๊ฒฝ๋ก",
maxBytes=5 * 1024 * 1024, backupCount=7)
- ์ต๋ 5MB์ฉ, ์ด 7๊ฐ์ ๋ก๊ทธ ํ์ผ์ ๋ง๋ค์ด ์ํํ๋๋ก ํ๋ค๋ ์๋ฏธ
..log rotate ํ๋ ๋ฒ์ ๋ํด์ ๋ ํฌ์คํ ํ ์์ ์ด๋ค