-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathlog.py
68 lines (53 loc) · 2.03 KB
/
log.py
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
import time
import gzip
import os
import re
from datetime import datetime
from mk2.plugins import Plugin
from mk2.events import Console, ServerStopped, ServerStopping, ServerOutput
class Log(Plugin):
gzip = Plugin.Property(default=True)
path = Plugin.Property(default="logs/server-{timestamp}-{status}.log.gz")
vanilla = Plugin.Property(default=False)
log = ""
reason = "unknown"
time_re = re.compile(r'(?:\d{2}:\d{2}:\d{2}) (.*)')
restore = ('log',)
def setup(self):
if self.vanilla:
self.register(self.vanilla_logger, ServerOutput, pattern='.*')
else:
self.register(self.logger, Console)
self.register(self.shutdown, ServerStopped)
self.register(self.pre_shutdown, ServerStopping)
def vanilla_logger(self, event):
m = self.time_re.match(event.line)
if m:
self.log += "{} {}\n".format(event.time, m.group(1))
else:
self.log += "{}\n".format(event.line)
def logger(self, event):
self.log += "{}\n".format(event.value())
def pre_shutdown(self, event):
self.reason = event.reason
def shutdown(self, event):
reason = self.reason
if reason == None:
reason = "ok"
timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
path = self.path.format(timestamp=timestamp, name=self.parent.name, status=reason)
if not os.path.exists(os.path.dirname(path)):
try:
os.makedirs(os.path.dirname(path))
except OSError:
self.console("Warning: {} does't exist and I can't create it".format(os.path.dirname(path)),
kind='error')
return
if self.gzip:
f = gzip.open(path, 'wb')
else:
f = open(path, 'w')
f.write(self.log.encode('utf8'))
f.close()
self.console("server.log written to %s" % os.path.realpath(path))
self.log = ""