ãPythonãð è¶ åå¿è åãïŒPythonã®loggerã£ãŠãªã«ïŒprintãšã®éãããããã解説ïŒ
ð è¶ åå¿è åãïŒPythonã®loggerã£ãŠãªã«ïŒprintãšã®éãããããã解説ïŒ
ããã«ã¡ã¯ãGreentomatoã§ãïŒ
ä»åã¯ãæ¥åã§å©çšããŠããpythonã«ã€ããŠèšèŒããŸãïŒïŒ
PythonãæžããŠãããšãprint()
ãããªããŠlogger
䜿ããªããã£ãŠèšãããããšããããŸãããïŒïŒç§ã¯ã1幎ç®ã®æã«printã䜿ããªãã§ïŒïŒãšããèšãããŸããããïŒ
ä»åã¯ãPythonã®logger
ãšã¯äœãããªãprint
ãããã¡ãªã®ããåå¿è
åãã«ã
ããšã話ãšå®äŸã§ãããã解説ããŸãïŒ
ð¬ loggerã£ãŠãªã«ïŒ
ð¡ äžèšã§èšããšâŠ
logger
ã¯ãã¢ããªã®ç¶æ
ããšã©ãŒãèšé²ããããã®ããŒã«ã
ã€ãŸãã**è³¢ãprint()**ã§ãïŒ
ð€ printãšã®éãã£ãŠïŒ
é ç® | print() | logger |
---|---|---|
çšé | ãšããããåºå | ç®çå¥ã«åºåïŒãšã©ãŒã»ãããã°ãªã©ïŒ |
åºåå Žæ | ã³ã³ãœãŒã«ã ã | ã³ã³ãœãŒã«ããã¡ã€ã«ãå€éšãµãŒãã¹ãªã© |
ã¬ãã«ç®¡ç | ãªã | DEBUG / INFO / WARNING / ERROR / CRITICAL |
æ¬çªã§ã®äœ¿çš | éæšå¥š | æšå¥šããã |
ðž ããšã話ã§çè§£ããïŒ
print
ã¯ãå«ã¶äººã
ð£ïž - ããããŸã§æ¥ãããŒïŒãã£ãŠå€§å£°ã§èšãã ã
- 誰ãèããŠããã¯é¢ä¿ãªãããã¡ã¢ã«ãæ®ããªã
logger
ã¯ãèšé²ä¿ã
ð§Ÿ - ããã®æéã«ãããããããšãèµ·ããŸããããšã¡ãããšèšé²
- ç·æ¥ãªãèµ€åã§éç¥ããŠãããããåŸããèŠçŽããïŒ
â å®éã«äœ¿ã£ãŠã¿ããïŒ
print
ã§æžããã³ãŒã
â¶ def divide(a, b):
print(f"Dividing {a} by {b}")
return a / b
divide(10, 2)
â åããã©ããã°ããã¡ããã¡ãã«ãªãããããããšã©ãŒããããã¥ããâŠ
logger
ã§æžããã³ãŒã
â
import logging
# ãã¬ãŒã®èšå®
logging.basicConfig(level=logging.DEBUG)
def divide(a, b):
logging.info(f"Dividing {a} by {b}")
return a / b
divide(10, 2)
â INFOã¬ãã«ã§åºåãããïŒããšã§ã¬ãã«ãåãæ¿ããããšãå¯èœïŒ
ð ãã¡ã€ã«ã«åºåãã§ããïŒ
import logging
# ãã°ããã¡ã€ã«ã«ä¿å
logging.basicConfig(
filename='app.log',
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(message)s'
)
logging.debug("ããã¯ãããã°ã¡ãã»ãŒãž")
logging.warning("ããã¯èŠåã§ã")
â
app.log
ãšãããã¡ã€ã«ã«ãæå»ä»ãã®ãã°ãä¿åãããïŒ
ð¥ ãã°ã¬ãã«ã£ãŠïŒ
ã¬ãã« | çšé |
---|---|
DEBUG | éçºäžã®è©³çŽ°ãªæ å ± |
INFO | éåžžã®åäœãã° |
WARNING | åé¡ãèµ·ããããªãšã |
ERROR | ãšã©ãŒãçºçãããšã |
CRITICAL | ã·ã¹ãã ãæ¢ãŸããããªãšã |
ð äžçªãããã㪠logger ãã³ãã¬
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s'
)
logger = logging.getLogger(__name__)
logger.info("ã¢ããªãéå§ããŸãã")
logger.warning("ã¡ãã£ãšå±éºãªæäœã§ã")
logger.error("ãšã©ãŒãçºçããŸãã")
ð ãã°ãã¡ã€ã«ãžã®åºå
import logging
# ãã°ããã¡ã€ã«ã«ä¿åããèšå®
logging.basicConfig(
filename='app.log',
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(message)s'
)
logging.debug("ããã¯ãããã°ã¡ãã»ãŒãž")
logging.info("éåžžã®æäœã®ãã°")
logging.warning("ããã¯èŠåã§ã")
logging.error("ãšã©ãŒãçºçããŸãã")
èšå®ã®ãã€ã³ã
-
filename='app.log'
: ãã°ã¡ãã»ãŒãžã¯app.log
ã«ä¿åãããïŒãã¡ã€ã«åã¯èªç±ã«å€æŽå¯èœïŒ -
level=logging.DEBUG
: ãã®ã¬ãã«ä»¥äžïŒDEBUGãCRITICALïŒã®ãã°ãèšé²ããã -
format='%(asctime)s [%(levelname)s] %(message)s'
: æ¥æã»ã¬ãã«ã»ã¡ãã»ãŒãžã®è¡šç€ºåœ¢åŒãèšå®
ð ãã°ãã©ãŒãããã®ã«ã¹ã¿ãã€ãº
ãã°ãã©ãŒããããã«ã¹ã¿ãã€ãºããããšã§ãåºåããããã°ã®æ å ±ãèªåã®ããŒãºã«åãããŠèª¿æŽã§ããŸãã
ãã䜿ããã©ãŒãããã®äŸ
- æ¥æããã°ã¬ãã«ãã¡ãã»ãŒãž
format='%(asctime)s [%(levelname)s] %(message)s'
- æ¥æããã°ã¬ãã«ãã¢ãžã¥ãŒã«åã颿°åãè¡çªå·
format='%(asctime)s [%(levelname)s] %(module)s.%(funcName)s:%(lineno)d - %(message)s'
â ãšã©ãŒã®åå ã远跡ãããããªããŸãïŒ
ð¡ ãã°ã®ããŒããŒã·ã§ã³
ãã°ãã¡ã€ã«ã倧ãããªããããªãããã«ãRotatingFileHandler
ã䜿ã£ãŠèªåçã«åå²ã§ããŸãã
import logging
from logging.handlers import RotatingFileHandler
# ãã°ããŒããŒã·ã§ã³ã®èšå®
handler = RotatingFileHandler('app.log', maxBytes=5000, backupCount=3)
handler.setLevel(logging.DEBUG)
# ãã¬ãŒã«ãã³ãã©ãŒã远å
logger = logging.getLogger()
logger.addHandler(handler)
logger.debug("ãããã°ã¡ãã»ãŒãž")
ãã©ã¡ãŒã¿ã®æå³
-
maxBytes=5000
: 5KBãè¶ ããããã¡ã€ã«ãåãæ¿ã -
backupCount=3
: å€ããã°ãã¡ã€ã«ã3ã€ãŸã§ä¿æ
ð æçµãŸãšã
-
logger
ã¯ãèšé²ä¿ããprint
ã¯ãå«ã¶äººã - æ¬çªç°å¢ãããŒã éçºã§ã¯
logger
ãå¿ é ïŒ - æäœéã§ã
logging.basicConfig()
ã䜿ããïŒ -
logging.basicConfig()
ã䜿ã£ãŠãã°ãã¡ã€ã«ã«åºåã§ãã - ãã©ãŒãããã倿ŽããŠãå¿ èŠãªæ å ±ãå«ããããšãã§ãã
- ãã°ããŒããŒã·ã§ã³ã§ãã¡ã€ã«ãµã€ãºã管çå¯èœ
é·æéåããã¢ããªããšã©ãŒèª¿æ»ã«ã¯ logger
ããšãŠã匷åã§ãðª
ãŸãã¯ã·ã³ãã«ã«å§ããŠãåŸã
ã«èªåã®ãããžã§ã¯ãã«åã£ããã°èšèšãããŠã¿ãŸãããïŒ
ðããšãããã print
ãã¯åæ¥ããŠã
âšã¹ããŒããªãã°åºåã«ãã£ã¬ã³ãžããŠã¿ããïŒ
Discussion