๐[Django] django logger?
Logger?
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ณด๋ฉด ์ฌ๋ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด๊ฑธ ํ๋ํ๋ print()
๋ฅผ ์ฌ์ฉํด์ ์๋ฒ ์ค๋ฅ์ ์ฐ๋๊ฒ ๊ณผ์ฐ ๋ง์๊น?
์ด๋ด ๋ ์ฌ์ฉํ๋๊ฒ logging
์ด๋ค!
logging
์ ์์คํ
์ ์ํ, ์๋ฌ๋ฅผ ๊ธฐ๋ก ๋ฐ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Django๋ ๋ก๊น ๋ชจ๋์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๊ฑธ ์ฌ์ฉํ๋ฉด ๋๋ค!
settings
(... ์๋ต ...)
# ๋ก๊น
์ค์
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[{server_time}] {message}',
'style': '{',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
์ถ์ฒ: https://wikidocs.net/77522
version
version
์ ๊ณ ์ ๊ฐ 1์ ์ฌ์ฉํ๋ค.
๋ณ ์๋ฏธ ์๋ ์ค์ ์ด ์๋๋ผ, logging
๋ชจ๋์ด ์
๊ทธ๋ ์ด๋ ๋์ด๋ ํ์ฌ ์ค์ ์ ์ ์ง์์ผ์ฃผ๋ ์์ ์ฅ์น์!
disable_existing_loggers
disable_existing_loggers
ํญ๋ชฉ์ False
๋ก ์ค์ ํจ.
๋ง์ฝ True
๋ก ์ค์ ํ๋ฉด ๊ธฐ์กด์ ์ค์ ๋ ๋ก๊ฑฐ๋ค์ ์ฌ์ฉํ์ง ์๋ ์ค์ ์ด ๋จ.
๊ธฐ์กด ๋ก๊ฑฐ ์ค์ ์ ๋ฒ๋ฆฌ๋ ค๋ฉด True๋ก!
filters
filters
๋ ํน์ ์กฐ๊ฑด์์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ์ถ๋ ฅํ์ง ์๊ธฐ ์ํ ์ต์
์.
require_debug_false
ํํฐ๋ DEBUG=False
์ธ์ง๋ฅผ ํ๋จํ๋ ํํฐ์. (true๋ ๋น์ฐํ ๋ฐ๋ ํํฐ์์!)
์กฐ๊ฑด ํ๋จ์ ์ํ ํด๋์ค์ธ django.utils.log.RequireDebugFalse
& django.utils.log.RequireDebugTrue
๋ฅผ ํธ์ถํ์ฌ DEBUG ์ต์
์ ๊ฐ์ ํ์ธํจ!
formatters
formatters
๋ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ ํ์
์ ์ง์ ํ๋ค!
์ ์์์์๋ ์๋ ํ์์ ์ฌ์ฉํ๋ค.
- server_time: ์๋ฒ ์๊ฐ
- message: ์ถ๋ ฅ ๋ด์ฉ
handlers
handler
๋ ๋ก๊ทธ์ ์ถ๋ ฅ ๋ฐฉ๋ฒ์ ์ ์ํจ.
๋ค์์ DEFAULT_LOGGING
์ค์ ์ ๋ฑ๋ก๋ ํธ๋ค๋ฌ์.
- console: ์ฝ์์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ. ๋ก๊ทธ ๋ ๋ฒจ์ด
INFO
์ด์์ด๊ณ ,DEBUG=True
์ผ ๋๋ง ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ. - django.server:
python [manage.py](http://manage.py) runserver
๋ก ๋์ํ๋ ๊ฐ๋ฐ ์๋ฒ์์๋ง ์ฌ์ฉํ๋ ํธ๋ค๋ฌ๋ก, ์ฝ์์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ. - mail_admins: ๋ก๊ทธ ๋ด์ฉ์ ์ด๋ฉ์ผ๋ก ์ ์กํ๋ ํธ๋ค๋ฌ๋ก, ๋ก๊ทธ ๋ ๋ฒจ์ด
ERROR
์ด์์ด๊ณ ,DEBUG=False
์ผ ๋๋ง ๋์ํ๋ค. ์ด ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๊ฒฝ์ค์ ํ์ผ์ADMINS
ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ , ๊ด๋ฆฌ์ ์ด๋ฉ์ผ์ ๋ฑ๋กํด์ผ ํจ. (์: ADMINS = [โaaa@test.orgโ]) ์ถ๊ฐ๋ก ๋ฉ์ผ ์ ์ก์ ์ํ SMTP ์ค์ ์ ํ์์!
loggers
๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ก๊ฑฐ(logger)
๋ฅผ ์๋ฏธํจ!
DEFAULT_LOGGING
์ค์ ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ก๊ฑฐ๋ค์ด ๋ฑ๋ก๋์ด ์์!
- django: django๊ฐ ์ฌ์ฉํ๋ ๋ก๊ฑฐ์. ๋ก๊ทธ ๋ ๋ฒจ์ด
INFO
์ด์์ผ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ. - django.server: ๊ฐ๋ฐ ์๋ฒ๊ฐ ์ฌ์ฉํ๋ ๋ก๊ฑฐ์. ๋ก๊ทธ ๋ ๋ฒจ์ด
INFO
์ด์์ผ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํจ.โpropagate: Falseโ
๋ django.server๊ฐ ์ถ๋ ฅํ๋ ๋ก๊ทธ๋ฅผ django ๋ก๊ฑฐ๋ก ์ ๋ฌํ์ง ์๋๋ค๋ ์๋ฏธ์. ๋ง์ฝ ์ด๊ฒTrue
์ด๋ฉด ์ต์์ ํจํค์ง๋ช ์ด django๋ก ๋์ผํ๊ธฐ ๋๋ฌธ์ django.server ํ์ ํจํค์ง์์ ์ถ๋ ฅํ๋ ๋ก๊ฑฐ์๋ ์ถ๋ ฅ๋๊ณ , django ๋ก๊ฑฐ์๋ ์ถ๋ ฅ๋์ด ์ด์ค์ผ๋ก ๋ก๊น ๋จ. (์ด์ค ๋ก๊น โ ๊ตณ์ด?)
Logging Level?
์์์ ์๊พธ ๋ก๊ทธ ๋ ๋ฒจ
์ด๋ผ๊ณ ํ๋๋ฐ, ์ด๊ฒ ๋ญ๊น?
๋ก๊ทธ ๋ ๋ฒจ์ ๋ง ๊ทธ๋๋ก ๋ก๊ทธ๋ฅผ ์ฐ์ ๋, ํด๋น ๋ก๊ทธ์ ์์ค์ ๋ํ๋ธ๋ค.
์ด 5๋จ๊ณ์ ๋ ๋ฒจ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
- [1๋จ๊ณ]
DEBUG
: ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ - [2๋จ๊ณ]
INFO
: ์ผ๋ฐ ์ ๋ณด ์ถ๋ ฅ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ - [3๋จ๊ณ]
WARNING
: ๊ฒฝ๊ณ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ (๋น๊ต์ ์์ ๋ฌธ์ ) - [4๋จ๊ณ]
ERROR
: ์ค๋ฅ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ (๋น๊ต์ ํฐ ๋ฌธ์ ) - [5๋จ๊ณ]
CRITICAL
: ์์ฃผ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ถ๋ ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
DEBUG < INFO < WARNING < ERROR < CRITICAL
๋ก๊ทธ ๋ ๋ฒจ์ ์ด๋ค ์ํฉ์ ์ ์ฉํ๋๊ฒ ์ข์๊น? (ChatGPT)
๐ฃ๏ธย django logging์ ์ฌ์ฉํ๋๋ฐ, ๊ฐ ๋ก๊น ๋ ๋ฒจ (debug, info, warning, error, critical, exception โฆ ) ๋ณ๋ก ์ด๋ค ์ํฉ์ ์ ์ฉํ๋๊ฒ ์ข์์ง ๊ถ๊ธํด. ์๋ฅผ ๋ค๋ฉด, try-except ๊ตฌ๋ฌธ ์์์ Order๋ผ๋ model์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ์ํฉ์ด ์๋ค๊ณ ํ์ ๋, DoesNotExist ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค ๋ก๊ทธ ๋ ๋ฒจ์ ์ฌ์ฉํด ๊ธฐ๋ก์ ๋จ๊ธฐ๋์ง ์๋ ค์ค.
๋ ๋ฒจ | ๋ฉ์๋ | ์ฉ๋ | ์ถ๋ ฅ ์์ |
---|---|---|---|
DEBUG | logger.debug(...) |
๊ฐ๋ฐยท๋๋ฒ๊น ๋จ๊ณ์์๋ง ํ์ํ, ์์ฃผ ์์ธํ ๋ด๋ถ ์ํ ์ ๋ณด | ํจ์ ์ง์ /์ข ๋ฃ, ๋ณ์๊ฐ, SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฑ |
INFO | logger.info(...) |
์ด์ ์์๋ ์์๋๋ฉด ์ข์, ์ ์์ ์ธ ํ๋ฆ ๋ด ์ด๋ฒคํธ | ์ดํ๋ฆฌ์ผ์ด์ ์์/์ข ๋ฃ, ์ฃผ์ ๋น์ฆ๋์ค ์ด๋ฒคํธ(์ฃผ๋ฌธ ์์ฑ ์๋ฃ ๋ฑ) |
WARNING | logger.warning(...) |
์์์ ํ์ง๋ง ์ฃผ์๊ฐ ํ์ํ ์ํฉ | ์กด์ฌํ์ง ์๋ ์ฃผ๋ฌธ ์กฐํ ์๋, ์ธ๋ถ API ์ง์ฐ ์๋ต ๋ฑ |
ERROR | logger.error(...) |
์ค์ ์ค๋ฅ(์์ธ) ๋ฐ์, ์ฒ๋ฆฌ๋ ๋์์ง๋ง ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์๋ ์ํฉ | DB ์ฐ๊ธฐ ์คํจ, ๋คํธ์ํฌ ์์ฒญ ์คํจ ๋ฑ |
EXCEPTION | logger.exception(...) |
ERROR ์ ๋์ผํ๋, ์คํ ํธ๋ ์ด์ค(traceback)๊น์ง ํจ๊ป ์ฐ์ (์์ธ ํธ๋ค๋ง ๋ธ๋ก ๋ด์์ ์ฌ์ฉ) |
์์์น ๋ชปํ ์์ธ๊ฐ ๋ฐ์ํด ํธ๋ ์ด์ค๋ฐฑ์ด ํ์ํ ๋ |
CRITICAL | logger.critical(...) |
์๋น์ค ์ ์ฒด๋ฅผ ์ค๋จ์ํฌ ์ ์๋ ์น๋ช ์ ์ค๋ฅ | ์ธํ๋ผ(๋์คํฌ ํ๋ถ์กฑ, ๋ฉ๋ชจ๋ฆฌ OOM) ๋ฑ |
DoesNotExist
์์ธ๊ฐ ๋ฐ์ํ๋๊ฑด ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉ์ ์์ฒญ ํ๋ฆ์์ ์ถฉ๋ถํ ์์ ๊ฐ๋ฅํ ๋ฌธ์ ์ด๋ฏ๋กWARGNING
์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ์ธ์ ์์ธ ์ค, ์์์น ๋ชปํ ์๋ฌ์ ๋ํด์๋EXCEPTION
์ ์ฌ์ฉํ๋ฉด ๋๋ค. (์ด ๋๋ ์ด๋ค ์์ธ๊ฐ ๋ฐ์ํ๋์ง์คํ ํธ๋ ์ด์ค
๊ฐ ํ์ํจ)
๋ ๋ฒจ ๋ณ ์ถ๋ ฅ ๊ฐ์ด๋๋ผ์ธ
- DEBUG
- ๋์: ๊ฐ๋ฐ์
- ๋ด์ฉ: ๋ด๋ถ ๋ณ์, ํจ์ ์ง์ /์ข ๋ฃ, SQL ์ฟผ๋ฆฌ, ํ์ด๋ฐ ์ธก์ ๋ฑ
- ํ์ฉ: ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ํ์ฑํ. ์ด์ ํ๊ฒฝ์์ ๋ณดํต ๊บผ๋ .
- INFO
- ๋์: ์ด์์/๊ฐ๋ฐ์
- ๋ด์ฉ: ์ ์์ ์ธ ๋น์ฆ๋์ค ์ด๋ฒคํธ(์ฃผ๋ฌธ ์ ์, ์ด๋ฉ์ผ ๋ฐ์ก ์ฑ๊ณต ๋ฑ)
- ํ์ฉ: ์ด์ ๋ก๊ทธ์ ๋จ๊ฒจ๋์, ์๋น์ค ํ๋ฆ ๋ชจ๋ํฐ๋ง์ ํ์ฉ.
- WARNING
- ๋์: ์ด์์
- ๋ด์ฉ: ๋น์ ์์ ์ด์ง๋ง ์น๋ช ์ ์ด์ง ์์ ์ํฉ(์กด์ฌํ์ง ์๋ ๋ฆฌ์์ค ์กฐํ ๋ฑ)
- ํ์ฉ: ๋๋ฌด ์ฆ์ผ๋ฉด ๋ ธ์ด์ฆ๊ฐ ๋ ์ ์์ผ๋, ์ ๋ง โ์ฃผ์๊ฐ ํ์ํโ ๊ฒฝ์ฐ๋ง.
- ERROR
- ๋์: ์ด์์
- ๋ด์ฉ: ์์ธ ๋ฐ์์ผ๋ก ํน์ ๊ธฐ๋ฅ์ด ์คํจํ์ผ๋, ์ ์ฒด ์๋น์ค๋ ์ง์๋๋ ์์ค
- ํ์ฉ: SentryยทELK ๊ฐ์ ์๋ฌ ๋ชจ๋ํฐ๋ง ์์คํ ๊ณผ ์ฐ๋ํด ๊ฒฝ๊ณ ยท์๋ฆผ.
- EXCEPTION
- ๋์: ์ด์์ยท๊ฐ๋ฐ์
- ๋ด์ฉ:
ERROR
+ ์คํ ํธ๋ ์ด์ค. ์์ธ์ ์์ธ ํ์ ์ด ํ์ํ ๋ - ํ์ฉ:
except Exception:
๋ธ๋ก ์์์ ์์ธ ๋๋ฒ๊น ์ฉ์ผ๋ก ์ฌ์ฉ.
- CRITICAL
- ๋์: ์ด์์
- ๋ด์ฉ: ์ ์ฒด ์๋น์ค ์ค๋จ ๊ฐ๋ฅ์ฑ ์๋ ์ค๋ฅ
- ํ์ฉ: ์๋ฆผยท์๋ ์ฅ์ ๋ณต๊ตฌ ํธ๋ฆฌ๊ฑฐ์ ์ฐ๊ฒฐ.
์ค์ ์ ์ฉ
settings.py
...
LOG_DIR = os.path.join(BASE_DIR, 'logs')
os.makedirs(LOG_DIR, exist_ok=True) # logs ๋๋ ํ ๋ฆฌ ์์ผ๋ฉด ์๋ ์์ฑ
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # Django ๊ธฐ๋ณธ ๋ก๊ฑฐ ๋์ง ์์
'formatters': {
'custom': {
'format': '[{asctime}] [{filename}:{lineno}] [{levelname}] {message}',
'style': '{',
'datefmt': '%Y-%m-%d %H:%M:%S', # ์๋ฒ ์๊ฐ ํ์
},
},
'handlers': {
'console': { # ์ฝ์์ ์ถ๋ ฅ
'class': 'logging.StreamHandler',
'formatter': 'custom', # formatters์ custom์ ๋ฐ๋ฆ
'level': 'INFO', # INFO ์ด์๋ง ์ถ๋ ฅ
},
'file': { # ํ์ผ์ ์ถ๋ ฅ
'class': 'logging.FileHandler',
'formatter': 'custom',
'filename': os.path.join(LOG_DIR, 'django.log'),
'level': 'DEBUG', # DEBUG ์ด์๋ง ์ถ๋ ฅ
},
},
'loggers': {
'': { # root logger
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
'django': { # Django ๋ด๋ถ ๋ก๊ฑฐ๋ ํฌํจํ๋ ค๋ฉด ์ด ํญ๋ชฉ ์ ์ง
'handlers': ['console', 'file'],
'level': 'INFO',
'propagate': False,
},
}
}
LOG_DIR
: ๋ก๊ทธ๋ฅผ ์ ์ฅํ ์์น๋ฅผ ์ง์ ํจos.makedirs
: ์์ผ๋ฉด ์์ฑํ๋๋กformat
: ๋ก๊ทธ ํ ์ค์ ์ถ๋ ฅ ํฌ๋งท{asctime}
: ๋ก๊ทธ ์ถ๋ ฅ ์๊ฐ (์๋ฒ ์๊ฐ){filename}
: ๋ก๊ทธ๋ฅผ ํธ์ถํ ํ์ผ๋ช{lineno}
: ํธ์ถํ ๋ผ์ธ ๋ฒํธ{levelname}
: ๋ก๊ทธ ๋ ๋ฒจ (INFO, ERROR ๋ฑ){message}
: ์ค์ ๋ก๊ทธ ๋ฉ์์ง
style
: ๋ฌธ์์ด ํฌ๋งท ์คํ์ผ์str.format()
๋ฐฉ์์ผ๋ก ์ง์ ({}
์ฌ์ฉ ๊ฐ๋ฅ)datefmt
: ์๊ฐ ์ถ๋ ฅ ํ์ (strftime
ํ์)handler
StreamHandler
: ํฐ๋ฏธ๋(์ฝ์)๋ก ์ถ๋ ฅformatter
: ์์์ ๋ง๋custom
ํฌ๋งท ์ฌ์ฉFileHandler
: ์ง์ ๋ ํ์ผ(logs/django.log
)์ ๋ก๊ทธ ์ถ๋ ฅ
loggers
''
- ์ด๋ฆ์ด ๋น ๋ฌธ์์ด
''
์ธ ๊ฒ์ ๋ชจ๋ ์ฑ๊ณผ ๋ชจ๋์ ๊ณตํต ์ ์ฉ๋๋ ๋ฃจํธ ๋ก๊ฑฐ์ handlers
: ์ฝ์๊ณผ ํ์ผ ๋ชจ๋์ ๋ก๊ทธ ์ถ๋ ฅlevel
:INFO
์ด์๋ง ์ถ๋ ฅpropagate=False
: ๋ก๊ทธ๊ฐ ์ค๋ณต ์ ํ๋์ง ์๋๋ก ์ค์ (์์ ๋ก๊ฑฐ๋ก ์ ๋ณด๋ด๊ฒ ๋ง์)
- ์ด๋ฆ์ด ๋น ๋ฌธ์์ด
django
- Django ๋ด๋ถ ๋์ (์: ์์ฒญ ์ฒ๋ฆฌ, static serve ๋ฑ)์ ๋ก๊ทธ ์ถ๋ ฅ
INFO
์ด์์ ๋ก๊ทธ๊ฐconsole
๊ณผfile
๋ก ๋ชจ๋ ๊ธฐ๋ก๋จ
๋ก๊ทธ ์ถ๋ ฅ ์์
[2025-04-14 15:32:00] [views.py:42] [INFO] SUPER_ADMIN ์์ฒญ, ์ ์ฒด ์ ์ ์: 87
๋ง์ฝ ๋ก๊ทธ ํ์ผ์ ๋ถ๋ฆฌํด์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด?
ChatGPT๋ ์ ์ด๋ค.
๊ธฐ์กด settings.py
์์ file
์ค์ ์ ์๋์ฒ๋ผ ์์ ํด๋ณผ ์ ์๋ค.
'file': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'formatter': 'custom',
'filename': os.path.join(LOG_DIR, 'django.log'), # logs/django.log ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋จ
'when': 'midnight', # ๋งค์ผ ์์ ๋ง๋ค ํ์
'interval': 1,
'backupCount': 7, # 7์ผ๊ฐ ๋ฐฑ์
ํ์ผ ๋ณด๊ด
'encoding': 'utf-8',
'level': 'INFO',
},
logging.handlers.TimedRotatingFileHandler
: ์๊ฐ(๋ ์ง) ๊ธฐ์ค์ผ๋ก ํ์ผ์ ํ์ ์ํค๋ ํด๋์คwhen
: ์ธ์ ๋ง๋ค ํ์ ์ํฌ๊ฑด์ง?backupCount
: ๋ฉฐ์น ๊ฐ์ ๋ฐฑ์ ํ์ผ์ ๋ณด๊ดํ ๊ฑด์ง?
์๋์ฒ๋ผ ๋ฐ๊พธ๋ฉด ์ผ์ ์ฉ๋์ด ๋์ด๊ฐ๋ฉด ๋ฐ๊พธ๋๋ก ํ ์๋ ์์!
'class': 'logging.handlers.RotatingFileHandler',
'maxBytes': 1024 * 1024 * 5, # 5MB
'backupCount': 5, # 5๊ฐ๊น์ง ๋ณด๊ด
logging.handlers.RotatingFileHandler
: ๋ก๊ทธ ํ์ผ์ ์ฉ๋์ด ์ผ์ ์ฉ๋์ด ๋์ด๊ฐ๋ฉด ํ์ ์ํค๋ ํด๋์คmaxBytes
: ์ต๋ ์ฉ๋ ์ง์ backupCount
: ์ต๋ ๋ณด๊ด ๊ฐ์
๋๊ธ๋จ๊ธฐ๊ธฐ