1
2
3
4
5 import copy
6 import logging.handlers
7 import os.path
8 import thread
9
10 from lib.cuckoo.common.colors import red, yellow, cyan
11 from lib.cuckoo.core.database import Database
12 from lib.cuckoo.common.constants import CUCKOO_ROOT
13
14 _tasks = {}
15
17 """Logging to database handler.
18 Used to log errors related to tasks in database.
19 """
20
21 - def emit(self, record):
25
27 """Per-task logger.
28 Used to log all task specific events to a per-task cuckoo.log log file.
29 """
30
31 - def emit(self, record):
32 task_id = _tasks.get(thread.get_ident())
33 if not task_id:
34 return
35
36
37 logpath = os.path.join(
38 CUCKOO_ROOT, "storage", "analyses", "%s" % task_id, "cuckoo.log"
39 )
40
41 with open(logpath, "a+b") as f:
42 f.write("%s\n" % self.format(record))
43
45 """Logging to console handler."""
46
47 - def emit(self, record):
48 colored = copy.copy(record)
49
50 if record.levelname == "WARNING":
51 colored.msg = yellow(record.msg)
52 elif record.levelname == "ERROR" or record.levelname == "CRITICAL":
53 colored.msg = red(record.msg)
54 else:
55 if "analysis procedure completed" in record.msg:
56 colored.msg = cyan(record.msg)
57 else:
58 colored.msg = record.msg
59
60 logging.StreamHandler.emit(self, colored)
61
63 """Associate a thread with a task."""
64 _tasks[thread.get_ident()] = task_id
65
67 """Disassociate a thread from a task."""
68 _tasks.pop(thread.get_ident(), None)
69