Pythonã§ããã°ã©ã ãæžããŠããŠãåäœç¢ºèªã®ããã« print() ããã¡ãã¡ã«æ£ãã°ããŠããŸãããïŒæåã®ãã¡ã¯ããã§ååã§ãããããã°ã©ã ã®èŠæš¡ã倧ãããªã£ãŠãããšããã©ãã§ã»ãã€ã»ã©ããªæ·±å»åºŠã§äœãèµ·ããã®ãããæŽçããŠæ®ããŠããä»çµã¿ãå¿
èŠã«ãªããŸãã
ããã§ç»å Žããã®ããPythonæšæºã©ã€ãã©ãªã® logging ã¢ãžã¥ãŒã«ãããã䜿ãããªããããã«ãªããšãã¡ãã£ãšããã¹ã¯ãªãããäžæ°ã«ãçŸå Žã§äœ¿ããå
ç¢ãªããŒã«ããžãšé²åããŸãâš ãã°ã®åå ç©¶æããéçšäžã®ãã©ãã«å¯Ÿå¿ããé©ãã»ã©æ¥œã«ãªããŸããã
ãã°ãšã¯ãããã°ã©ã ã®åäœç¶æ³ãèšé²ããã足跡ãã®ãããªãã®ãPythonã§ãšã©ãŒãåºããšãã«è¡šç€ºãããã¡ãã»ãŒãžããpip install å®è¡æã«ãºã©ããšæµãã鲿ã¡ãã»ãŒãžãããã¹ãŠãã°ã®äžçš®ã§ãã
ãã°ããããšããããªãšãã«å€§å©ããããŸãã
ãåããŠããããOKãã§ã¯ãªããåŸããæ¯ãè¿ããç¶æ ããäœãããšââãããããã®ã³ãŒãã£ã³ã°ãžã®ç¬¬äžæ©ã§ãð¡
ãã°ãæ®ãã ããªã print() ã§ãã§ããã®ã«ããªã logging ã䜿ãã®ãïŒçãã¯ã·ã³ãã«ã§ããã°åºåã«ç¹åããäŸ¿å©æ©èœãæºèŒã ããã§ãã
ããããã¹ãŠã print() ã§åçŸããããšãããšå°çã§ããæåãã logging ã䜿ãçãã€ããŠãããŸãããð
loggingã¢ãžã¥ãŒã«ãçè§£ããã³ãã¯ã3ã€ã®ç»å Žäººç©ãæŒãããããšã
ãã®3ã€ã飿ºããããšã§ãæè»ãªãã°åºåãå®çŸããŸãã
from logging import getLogger, StreamHandler, DEBUG
# 1. ãã¬ãŒãäœæ
logger = getLogger(__name__)
logger.setLevel(DEBUG)
# 2. ãã³ãã©ãŒãäœæïŒæšæºåºåã«åºãã¿ã€ãïŒ
handler = StreamHandler()
handler.setLevel(DEBUG)
# 3. ãã¬ãŒã«ãã³ãã©ãŒãã»ãã
logger.addHandler(handler)
# 4. ãã°ãåºåïŒ
logger.debug("ããã¯ãããã°ãã°ã§ã")
ãã£ãæ°è¡ã§ãããããã§ãã print() ããäžæ®µäžã®ãã°åºåã宿ã§ãð
getLogger(__name__) ã® __name__ ã¯Pythonã®ç¹æ®ãªå€æ°ã§ããã®ãã¡ã€ã«ã®ã¢ãžã¥ãŒã«åãèªåã§å
¥ããŸããçŽæ¥å®è¡ããããšã㯠"__main__"ãimportããããšãã¯ã¢ãžã¥ãŒã«åã«ãªããŸããããšããããããŸããªããšããŠæžããã§æåã¯OKã§ãã
Pythonã®loggingã«ã¯ã5段éã®ãã°ã¬ãã«ãçšæãããŠããŸããäžã«ããã»ã©é倧床ãé«ããšèŠããŸãããã
ãã¬ãŒã«ã¯åã¬ãã«ã«å¯Ÿå¿ããååã®ã¡ãœããããããŸãã
logger.debug("ãããã°æ
å ±")
logger.info("æ£åžžåäœäž")
logger.warning("泚æãå¿
èŠã§ã")
logger.error("ãšã©ãŒãçºçããŸãã")
logger.critical("èŽåœçãªåé¡ã§ã")
ãã¬ãŒãšãã³ãã©ãŒã®äž¡æ¹ã«ã¬ãã«ãèšå®ããå¿ èŠããããäž¡æ¹ã®æ¡ä»¶ãæºãããªããšåºåãããŸããã
ããã¯äžèŠãããããæããŸãããåŸã§èª¬æãããè€æ°ã®ãã³ãã©ãŒã䜿ãåããããšãã«åšåãçºæ®ããŸãðª
ãã ãã°ãåºãã ãã§ã¯ããã€ã»ã©ãã§ã»äœãèµ·ãããããåããã«ããã§ããããFormatterã䜿ããšããã°ã«èªåã§æ å ±ãä»ãè¶³ããŸãã
from logging import Formatter
formatter = Formatter("[%(levelname)s] %(asctime)s %(message)s (%(filename)s)")
handler.setFormatter(formatter)
ãã䜿ããã¬ãŒã¹ãã«ãã¯ãã¡ãã
%(levelname)sïŒãã°ã¬ãã«ïŒDEBUG/INFOãªã©ïŒ%(asctime)sïŒãã°åºåæå»%(message)sïŒãã°ã¡ãã»ãŒãžæ¬æ%(filename)sïŒãã°åºåã³ãŒããæžããããã¡ã€ã«å%(funcName)sïŒé¢æ°å%(lineno)dïŒè¡çªå·ããã ãã§ãåºåçµæãäžæ°ã«ãããã°ã©ã ã®ãã°ããããèŠãç®ã«å€ãããŸãã
[ERROR] 2026-05-10 14:32:15,123 ãšã©ãŒãçºçããŸãã (app.py)
ç»é¢ã«æµãã ãã§ã¯ãåŸã§æ¯ãè¿ãããšãã§ããŸãããFileHandler ã䜿ãã°ããã°ããã¡ã€ã«ã«ä¿åã§ããŸãã
from logging import FileHandler
file_handler = FileHandler("log.txt")
file_handler.setLevel(DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.error("ãã¡ã€ã«ã«ãèšé²ãããŸã")
å®è¡ãããš log.txt ãçæãããåå®è¡ããããšã«è¿œèšã¢ãŒãã§ãã°ãæºãŸã£ãŠãããŸãð ãµãŒããŒã§åããã¹ã¯ãªããã®å®ç³ã§ãã
ãã³ãã©ãŒã¯è€æ°ç»é²ã§ããã®ã§ããããªäœ¿ãåããå¯èœã§ãã
# å
šã¬ãã«ã log_all.txt ã«
all_handler = FileHandler("log_all.txt")
all_handler.setLevel(DEBUG)
# ERROR以äžã ã error.txt ã«
error_handler = FileHandler("error.txt")
error_handler.setLevel(ERROR)
logger.addHandler(all_handler)
logger.addHandler(error_handler)
ããã§ãæ®æ®µã¯ log_all.txt ã§ãã£ããè¿œè·¡ãæ¥ãã®é害察å¿ã§ã¯ error.txt ã ã確èªããšããéçšãäžçºã§å®çŸããŸãâš ãã¬ãŒãšãã³ãã©ãŒã®äž¡æ¹ã«ã¬ãã«ãããã®ã¯ããŸãã«ãã®ãããªãã§ãã
ãã°èšèšã¯ãåãããŠã¿ãŠã調æŽããŠããŸãåããããç¹°ãè¿ããã¡ã«èº«ã«ã€ãåéããæ°ã«å ¥ãã®æžç±ãšå¿«é©ãªäœæ¥ç°å¢ãæããã°ãPythonäžçŽè ãžã®é段ãäžæ®µãã€ç¢ºå®ã«äžãã£ãŠãããŸãã
ããã®ã³ã°ãå©çšããããprintãæ®ããªããªã©ãæ¬çš¿ã®å 容ãšçŽçµãããã¹ããã©ã¯ãã£ã¹ã90é ç®ã§æŽçãããŠããŸãããããæžãPythonã«è¿ã¥ããããã¹ãŠã®æ¹ã«ã
èšèªä»æ§ã ãã§ãªããGitã»ãã¹ãã»ãã®ã³ã°ãªã©ãçŸå Žã§å¿ èŠã«ãªãåšèŸºç¥èããç¶²çŸ ãããäžåãæ¬çš¿ã®loggingãšçµã¿åãããŠåŠã¶ãšããã£ãšå®è·µåãäžãããŸãã
宿å®è¡ã¹ã¯ãªãããWebã¹ã¯ã¬ã€ãã³ã°ãªã©ããã°ãæ¬åœã«åœ¹ç«ã€å®äŸãæºèŒããåŠãã loggingãããçæŽ»ã«å¿çšãããïŒããšããæ¹ã«ãŽã£ããã§ãã
ãã°èšå®ã¯ãã©ã€&ãšã©ãŒãå€ãã®ã§ãæéµæã®ããããŒããŒãããããšäœæ¥å¹çãæ®µéããéé³èšèšã§ããã¯ã©ã€ãä»ããå€ã®åŠç¿ãæ°æã¡ããç¶ããããŸãã
å·Šã«ã³ãŒããå³ã«ãã°åºåããã¡ã€ã«ã䞊ã¹ãŠãããšãloggingã®æåã確èªããªããã®éçºãã¹ã ãŒãºã«ãUSB-Cäžæ¬æ¥ç¶ã§ããã¢ãã«ã¯ããŒãPCåŠç¿è ã®åŒ·ã峿¹ã§ãã
print() ã¯åã«ç»é¢ã«åºãã ãã§ãããlogging ã¯ã¬ãã«ã§ãã£ã«ã¿ã»è€æ°ã®åºåå
ã»èªåçãªæå»ä»äžãªã©ãã§ããŸããæ¬çªç°å¢ã§ã¯ãã°ã ãæå¶ããããéçºäžã ã詳现ãåºããããäžçºã§åãæ¿ããããã®ãæå€§ã®éãã§ãã
åè
ã¯ã«ãŒããã¬ãŒïŒã¢ãžã¥ãŒã«çŽäžã®ãã¬ãŒïŒã«å¯Ÿããæäœã§ãåŸè
㯠getLogger() ã§ååŸããç¹å®ã®ãã¬ãŒãžã®æäœã§ããèŠæš¡ã倧ãããªãã»ã©åŸè
ã®æ¹ã管çãããããããæåãã logger = getLogger(__name__) ã§æžãçãã€ããã®ãããããã§ãã
ãã³ãã©ãŒã誀ã£ãŠ2å远å ããããŸãã¯èŠªãã¬ãŒã«ããã³ãã©ãŒãèšå®ãããŠãããªã©ãåå ã§ããlogger.handlers.clear() ã§äžåºŠã¯ãªã¢ããŠããèšå®ãçŽããšè§£æ±ºããããšãå€ãã§ãã
æšæºã©ã€ãã©ãªã® RotatingFileHandler ã TimedRotatingFileHandler ã䜿ããšããã¡ã€ã«ãµã€ãºãæ¥ä»ã§èªåçã«ãã°ãã¡ã€ã«ãåãæ¿ããŠãããŸããé·æéçšããã¹ã¯ãªããã§ã¯å¿
é ãã¯ããã¯ã§ãð
logging.basicConfig() ã䜿ããšããã³ãã©ãŒããã©ãŒããã¿ã®èšå®ãã¯ã³ã©ã€ããŒã§æžãŸããããŸããè©Šäœæ®µéãã·ã³ãã«ãªã¹ã¯ãªãããªãããã§ååãè€éãªèŠä»¶ãåºãŠãããæ¬çš¿ã®ããã«æåã§çµã¿ç«ãŠããšããã§ãããã
Pythonã® logging ã¢ãžã¥ãŒã«ã¯ãæåããããã¬ãŒã»ãã³ãã©ãŒã»ãã©ãŒããã¿âŠç»å Žäººç©ãå€ããŠé£ããïŒããšæãããããããŸãããã§ãããåœä»€ãã人ã»åºåããäººã»æŽãã人ããšãã圹å²åæ
ããæŒãããã°ãé©ãã»ã©ã¹ãããªçè§£ã§ããŸãã
5段éã®ãã°ã¬ãã«ã䜿ãåããçšéã«å¿ããŠç»é¢ãšãã¡ã€ã«ãžæ¯ãåããæå»ããã¡ã€ã«åãèªåã§ä»äžããââããã ãã§ãããªãã®ã³ãŒãã¯ãåãã ãããããéçšã«èããããŒã«ããžãšé²åããŸãð
ããã«å®ç§ã«çè§£ããå¿
èŠã¯ãããŸããããŸãã¯ãlogger = getLogger(__name__) ãæžãããlogger.info() ã§ã¡ãã»ãŒãžãæ®ãããšããå°ããªäžæ©ããå§ããŠã¿ãŠãã ããããæ°ã«å
¥ãã®æžç±ãšå¿«é©ãªäœæ¥ç°å¢ã峿¹ã«ã€ããŠãPythonäžçŽè
ãžã®é段ãäžæ®µãã€ç¢ºå®ã«äžãã£ãŠãããŸãããðâš
â ïž Windowsã»ãã¥ãªã…
ð§ çªç¶ã®æçš¿ã«ãã¡ã³éšç¶ïŒã©…
ð§© ããºã«ãè§£ãå¿«æãã³ãŒãã§…
âš ããã°ã©ã ã®åäœã軜ããã…
ð ãµãŒããŒãµã€ãéçºã®äžçãž…
âš é¢åãªWebäœæ¥ãèªååã…