Python loggingã§Discordã«åºåããã«ã¹ã¿ã ãã³ãã©äœã£ãŠã¿ã
ããã«ã¡ã¯Rcatã§ãã
ååã®èšäºã§ã¯HTTPã䜿ã£ãŠä»»æã®å
¥åãåãä»ããDiscordã®BOTãäœæããŸããã
ãããå©çšããããšã§ãããã°ã©ã å
ããHTTPãªã¯ãšã¹ããããããšã§ãã°çšBOTãšããŠã䜿ãããšãã§ããŸãã
ããŠãä»åã¯ãããããã«çºå±ãããŠãPythonã®æšæºã©ã€ãã©ãªã§ãã°ã管çãã"logging"ã©ã€ãã©ãªãšçµã¿åãããŠããã«äœ¿ãåæãåäžãããŠãããŸã!
ååã¯ãã¡ã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
https://note.com/rcat999/n/nb6a601a36ef5
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
æŠèŠ
Loggingã©ã€ãã©ãªãšã¯
loggingã©ã€ãã©ãªã¯Pythonã®æšæºã©ã€ãã©ãªã®1ã€ã§ããããã䜿ãããšã§ãã°ã®åºåã管çããããšãã§ããŸãã
æãç°¡åãªäœ¿çšäŸã¯ä»¥äžã®éãã§ãã
>>> import logging
>>> logging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s')
>>> logging.debug("ãããã°")
>>> logging.info("æ
å ±")
2024-11-09 22:39:47,931 INFO æ
å ±
>>> logging.warning("èŠå")
2024-11-09 22:39:47,972 WARNING èŠå
>>> logging.critical("èŽåœç")
2024-11-09 22:39:48,015 CRITICAL èŽåœçãã€ã³ããšããŠã¯å€§ããåããŠ2ã€ãããŸãã
1ã€ç®ã¯è¡šç€ºã綺éºã«ãªãã
æåã®ã³ã³ãã£ã°ã§è¡šç€ºåœ¢åŒãèšå®ããŠããŠå¿
ãããã«æ²¿ã£ãåºåãè¡ãããŸãã
次ã«ã¬ãã«ã®èšå®ã§ãã
ã³ã³ãã£ã°ãèŠããš"INFO"ãªã£ãŠããŸãããã
ã€ãŸããããã¯INFOããã¬ãã«ã®äœããã°ã¯è¡šç€ºããªãã§ãããšããèšå®ã«ãªããŸãã
ãªã®ã§ãããã°ã©ã äœæäžã«ããããªãšããã«ãããã°ã¬ãã«ã®ãã°ãããããæžããŠããããšããŠããé
ãåã«ã¬ãã«ãçŽãã°ãã¡ãã¡æ¶ããªããŠããããšããããšã§ãã
ãªããè²ã
調ã¹ãŠã¿ããšããã®æãç°¡åãªäœ¿ãæ¹ã¯æšå¥šãããŠãããããã¡ããšãã¬ãŒãäœæããŠäœ¿ãããšãæšå¥šãããŠããããã§ãã
ä»é§ãè¶³ã§äœæ¥ããŠããã®ã§ãããã§èª¬æã§ããã¬ãã«ãŸã§èœãšã蟌ããŠããªãã®ã§ããšããããã¯çç¥ãšãããŠãã ããã
ã§ãäœããã®ïŒ
äžã§èª¬æã¯çããšèšããŸãããããã¬ãŒã䜿ã£ãåºåæ¹æ³ããŸã説æããŸãã
>>> import logging
>>> loger = logging.getLogger("Rcat.Rlog") #èªç±ã«ååãã€ããŠãã¬ãŒãäœæ
>>> loger.setLevel(logging.WARNING) #ã¬ãã«ã¯ããã§ã»ãã
>>> handler = logging.StreamHandler() #ãã³ãã©ãŒãäœæãã¹ããªãŒã ãã³ãã©ãŒã¯ç»é¢ã«åºåãããšããããš
>>> handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) #åºåãã©ãŒãããã¯ããã§èšå®
>>> loger.addHandler(handler) #ãã¬ãŒã«å¯ŸããŠãã³ãã©ãŒãèšå®ãã
>>> loger.debug("ãããã°")
>>> loger.info("ã€ã³ãã©")
>>> loger.warning("ã¯ãŒãã³ã°")
2024-11-09 22:47:58,165 WARNING ã¯ãŒãã³ã°
>>> loger.critical("èŽåœç")
2024-11-09 22:47:58,871 CRITICAL èŽåœçã¯ãããããªæãã§ãã
ãã£ãšåããããã説æããŠãããŠãããšããããããããããŸãã®ã§ããã¬ãŒãšããã³ãã©ãŒãšãã«ã€ããŠã¯ãããã§ã¯çç¥ããŸãã
ä»èŠããã«ãã®ã³ã°ã©ã€ãã©ãªã¯ãéšåããšã«åè§£ããŠäœ¿ãããšãã§ããããšãããã£ãŠããã ããã°OKã§ãã
éšåããšã«åè§£ããŠäœ¿ããšããã®ããã©ãããããšããšãããšæ¬¡ã®éãã§ãã
>>> import logging
>>> loger = logging.getLogger("Rcat.loggingbot")
>>> shandler = logging.StreamHandler()
>>> shandler.setLevel(logging.INFO)
>>> shandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
>>> fhandler = logging.handlers.RotatingFileHandler(filename="log.log",encoding="UTF-8",maxBytes=1024^2*100,backupCount=10)
>>> fhandler.setLevel(logging.WARNING)
>>> fhandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
>>> loger.addHandler(shandler)
>>> loger.addHandler(fhandler)
>>> loger.debug("ãããã°")
>>> loger.info("ã€ã³ãã©")
>>> loger.warning("ã¯ãŒãã³ã°")
2024-11-09 22:52:37,701 WARNING ã¯ãŒãã³ã°
>>> loger.critical("èŽåœç")
2024-11-09 22:52:38,324 CRITICAL èŽåœçãããšèŠäœãã£ãŠããé£ãããšæããŸãã®ã§ãç°¡åã«èª¬æããŸãã
ãŸããã³ãã©ãŒã2ã€ããã®ããåããã§ããããïŒ
å
ã»ã©äœ¿çšãã"StreamHandler"ãšããäžã€è¿œå ã§"RotatingFileHandler"ãšããã®ãã€ã³ã¹ã¿ã³ã¹ããŠããŸã
ããã¯ãã¡ã€ã«ã«ãã°ãæžãåºãããã®ãã³ãã©ãŒãªãã§ãããäžå®ä»¥äžã®ãµã€ãºã«ãªããšå¥ã®ãã¡ã€ã«ã«æžãåºããŠããããšããåªããã®ã§ãã
ãããŠäžã®æ¹ã§addHandlerã䜿ã£ãŠãã¬ãŒã«çµ±åããŠããŸãããã
ããã§äœãã§ããããšãããšãç»é¢ãžã®åºåãšãã¡ã€ã«ãžã®åºåã®äž¡æ¹ãã§ãããšããããšã§ãã
ãã¡ããåºåããããã¡ã€ã«ã§ãã
ã¯ãŒãã³ã°ä»¥äžã®èšå®ãªã®ã§ãæ£ããæžãåºãããŠããããšãåãããŸãã

ã§ããããããæ¬é¡ãªã®ã§ããâŠ
ãã®ãã³ãã©ãŒèªåã§äœããã¿ãããªãã§ãã
ãããåããã§ããã
Discordbotãã³ãã©ãŒãäœæããã°ããã®ãã³ãã©ãŒãçµ±åããŠããŸãããšã§ãæšæºã©ã€ãã©ãªã§ãã°åºåãããšããã«ãªãªãžãã«ã®æ©èœãçµ±åããããšãã§ããŠããŸããŸãã
Logging BOTãã³ãã©ãŒäœã£ãŠã¿ã
ãµã³ãã«ã³ãŒããšã³ã³ãœãŒã«å®è¡çµæ
ãšããããã§ããŸãã¯ãããªãå®æåœ¢ããèŠãããŸãã
>>> import logging
>>> import loggingbot_client #ååäœæãããªãªãžãã«ã®ã¯ã©ã€ã¢ã³ã
>>> loger = logging.getLogger("Rcat.loggingbot")
>>> loger.setLevel(logging.DEBUG)
>>> shandler = logging.StreamHandler()
>>> shandler.setLevel(logging.DEBUG)
>>> shandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
>>> #--------------------------------------
>>> fhandler = logging.handlers.RotatingFileHandler(filename="log.log",encoding="UTF-8",maxBytes=1024^2*100,backupCount=10)
>>> fhandler.setLevel(logging.INFO)
>>> fhandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
>>> #--------------------------------------
>>> bothandler = loggingbot_client.Loggingbot_Handler("Rcat_loggingtest",Server="192.168.0.4")
>>> bothandler.setLevel(logging.WARNING)
>>> bothandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s'))
>>> #--------------------------------------
>>> loger.addHandler(shandler)
>>> loger.addHandler(fhandler)
>>> loger.addHandler(bothandler)
>>> loger.debug("ãããã°")
2024-11-09 23:09:00,593 DEBUG ãããã°
>>> loger.info("ã€ã³ãã©")
2024-11-09 23:09:00,613 INFO ã€ã³ãã©
>>> loger.warning("ã¯ãŒãã³ã°")
2024-11-09 23:09:00,638 WARNING ã¯ãŒãã³ã°
>>> loger.critical("èŽåœç")
2024-11-09 23:09:01,075 CRITICAL èŽåœçäžããé çªã«ç»é¢ã«è¡šç€ºããã¡ã€ã«ã«åºåããªãªãžãã«ã®Discordåºåã§ãã³ãã©ãŒãäœæããŠããŸããç»é¢ã®åºåã¯ãããã°ãªã®ã§å šãŠã®åºåãåºãŠããŸããã
ãã®ä»ã®å®è¡çµæã¯æ¬¡ã®éãã§ãã
Discord BOTåºåçµæ
ãã¡ãã¯ã¯ãŒãã³ã°ã§èšå®ããŸããã®ã§ããã以äžã®åºåãè¡ãããŠããŸãã倧æåã§ãã

ãã°ãã¡ã€ã«åºåçµæ
ãã¡ãã¯æ å ±ä»¥äžåºåã§èšå®ããŸããã®ã§ãåããåºåãããŠããŸãã

ãœãŒã¹ã³ãŒã
ãªãªãžãã«ãã³ãã©ãŒéšå
ãªãªãžãã«ãã³ãã©ã®ãœãŒã¹ã³ãŒãã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã
ã¯ããLoggingã©ã€ãã©ãªã®ãã³ãã©ãŒã¯ã©ã¹ãç¶æ¿ããŠãååäœæãããããã«ã¢ã¯ã»ã¹ããããã®ã¯ã©ã€ã¢ã³ããã€ã³ã¹ã¿ã³ã¹ããŠããã ãã§ãã
ãŸãããã£ããããã ãã§çµ±åã§ããŠããŸããªããŠâŠã

ååã®èšäºã¯ãã¡ããBOTã ãã§ã¯ãªããå°çšã®ã¯ã©ã€ã¢ã³ããçšæããŠããŸãã
驿³æ¹æ³
ã§ã¯ãå
·äœçã«ã¹ã¯ãªããã®äžã«åãèŸŒãæ¹æ³ã®äŸã玹ä»ããŸãã
ä»åã¯ä»¥äžã®ããã«ãã³ãã¬ãŒããäœæããŸããã

解説
ãŸããæåã«ã¹ã¯ãªããã®äžã§ã¯ãã¡ãã¡é¢æ°ã䜿ããã«dictConfigãšããä»çµã¿ã䜿ã£ãŠèšå®ãããŠããŸãããã®åæã§äžããé ã«ã話ãããŸãã
ãã倿Žããé ç®ã®æç²
ã¬ãã«ã®å€æŽããã¬ãŒã®ååãªã©ãæ¯èŒçãã倿Žãããã®ã¯äžã®æ¹ã«æã£ãŠããŠããŸãã2ã€ã®åºæ¬ãã³ãã©ãäœæ
ã¹ããªãŒã ãã³ãã©
ç»é¢ã«åºåããããã®ãã³ãã©ã§ãããã¡ã€ã«ãã³ãã©
ãã¡ã€ã«ã«åºåããããã®ãã³ãã©ã§ãã
ããŒããŒã·ã§ã³ã䜿ã£ãŠããã®ã§ã10mbã§ãã¡ã€ã«ãåãæ¿ããèšå®ã§ãã
Discordbotãã³ãã©ãŒã®äœæ
次ã«ååã®èšäºã§äœæããå°çšã®ã¯ã©ã€ã¢ã³ããã€ã³ããŒãããŸãã
ã€ã³ããŒãã«æåããå Žåã¯ããã®äžã«ãããã³ãã«ã¯ã©ã¹ã䜿ããããã«ãªããããèŸæžã«è¿œèšããŠããŸãããŒæ¬èšå®
dictConfigã®ä»çµã¿ãçšããäžæ¬ã§èšå®ãè¡ã£ãŠããŸãã
以éã¯ããã§äœæãããã¬ãŒã«å¯ŸããŠãã°ãåºåããŠããã ãã§ãã
é åžæ å ±
ä»åã®å€æŽå 容ã¯ã以äžã®èšäºã§é åžããŠããããŒã¿ãã¢ããããŒãããŠæäŸããŸãã