-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathbotlog.py
More file actions
108 lines (94 loc) · 4.39 KB
/
botlog.py
File metadata and controls
108 lines (94 loc) · 4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import asyncio
import creds
import discord
import logging
import logging.handlers
import math
import itertools
def setup_logging(bot, test_syncer=False):
logging.getLogger('discord').setLevel(logging.INFO)
logging.getLogger('discord.http').setLevel(logging.WARNING)
logging.getLogger('discord.state').setLevel(logging.WARNING)
logging.getLogger('websockets.protocol').setLevel(logging.WARNING)
logging.getLogger('coc').setLevel(logging.INFO)
logging.getLogger('coc.events').setLevel(logging.INFO)
logging.getLogger('coc.http').setLevel(logging.INFO)
log = logging.getLogger()
log.setLevel(logging.INFO)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
dt_fmt = '%H:%M:%S'
fmt = logging.Formatter('[{asctime}]: {message}', dt_fmt, style='{')
# if creds.live:
# handler = logging.FileHandler(filename='donationtracker.log', encoding='utf-8', mode='w')
# handler.setLevel(logging.INFO)
# handler.setFormatter(fmt)
# log.addHandler(handler)
stream_handler.setFormatter(fmt)
log.addHandler(stream_handler)
bot.error_webhooks = itertools.cycle([discord.Webhook.partial(
id=creds.log_hook_id,
token=creds.log_hook_token,
session=bot.session
)])
# add handler to the logger
# handler = logging.handlers.SysLogHandler('/dev/log')
#
# # add syslog format to the handler
# formatter = logging.Formatter(
# 'Python: { "loggerName":"%(name)s", "timestamp":"%(asctime)s", "pathName":"%(pathname)s", "logRecordCreationTime":"%(created)f", "functionName":"%(funcName)s", "levelNo":"%(levelno)s", "lineNo":"%(lineno)d", "time":"%(msecs)d", "levelName":"%(levelname)s", "message":"%(message)s"}')
#
# handler.formatter = formatter
# logger.addHandler(handler)
#
# logger.info("Test Log")
#
# class COCPYFilter(logging.Filter):
# def filter(self, record: logging.LogRecord) -> int:
# return record.msg == "API HTTP Request"
#
# logger = logging.getLogger("coc.http")
# logger.addFilter(COCPYFilter())
# logger.setLevel(logging.DEBUG)
# formatter = logging.Formatter('coc.py API: { "loggerName":"%(name)s", "timestamp":"%(asctime)s", "pathName":"%(pathname)s", "method": "%(method)s", "url": "%(url)s", "status": "%(status)s", "perf_counter": "%(perf_counter)s"}')
# handler = logging.handlers.SysLogHandler('/dev/log')
# handler.formatter = formatter
# logger.addHandler(handler)
class DiscordHandler(logging.NullHandler):
def handle(self, record):
if not creds.live:
return
if record.levelno < 20:
return
to_send = fmt.format(record)
messages = []
for i in range(math.ceil(len(to_send) / 1950)):
messages.append(to_send[i*1950:(i+1)*1950])
for n in messages:
try:
asyncio.ensure_future(next(bot.error_webhooks).send(f'```\n{n}\n```'))
except:
pass
def emit(self, record):
self.handle(record)
discord_hndlr = DiscordHandler()
discord_hndlr.setLevel(logging.INFO)
# log.addHandler(discord_hndlr)
def add_hooks(bot):
bot.error_webhook = discord.Webhook.partial(id=creds.error_hook_id,
token=creds.error_hook_token,
session=bot.session,
)
bot.join_log_webhook = discord.Webhook.partial(id=creds.join_log_hook_id,
token=creds.join_log_hook_token,
session=bot.session,
)
bot.feedback_webhook = discord.Webhook.partial(id=creds.feedback_hook_id,
token=creds.feedback_hook_token,
session=bot.session,
)
bot.command_webhook = discord.Webhook.partial(id=creds.command_hook_id,
token=creds.command_hook_token,
session=bot.session,
)
return bot