Package lldb :: Package formatters :: Module Logger
[hide private]
[frames] | no frames]

Source Code for Module lldb.formatters.Logger

  1  from __future__ import print_function 
  2  import sys 
  3  import os.path 
  4  import inspect 
  5   
6 -class NopLogger:
7 - def __init__(self):
8 pass
9
10 - def write(self,data):
11 pass
12
13 - def flush(self):
14 pass
15
16 - def close(self):
17 pass
18 19
20 -class StdoutLogger:
21 - def __init__(self):
22 pass
23
24 - def write(self,data):
25 print(data)
26
27 - def flush(self):
28 pass
29
30 - def close(self):
31 pass
32
33 -class FileLogger:
34 - def __init__(self, name):
35 self.file = None 36 try: 37 name = os.path.abspath(name) 38 self.file = open(name,'a') 39 except: 40 try: 41 self.file = open('formatters.log','a') 42 except: 43 pass
44
45 - def write(self,data):
46 if self.file != None: 47 print(data,file=self.file) 48 else: 49 print(data)
50
51 - def flush(self):
52 if self.file != None: 53 self.file.flush()
54
55 - def close(self):
56 if self.file != None: 57 self.file.close() 58 self.file = None
59 60 # to enable logging: 61 # define lldb.formatters.Logger._lldb_formatters_debug_level to any number greater than 0 62 # if you define it to any value greater than 1, the log will be automatically flushed after each write (slower but should make sure most of the stuff makes it to the log even if we crash) 63 # if you define it to any value greater than 2, the calling function's details will automatically be logged (even slower, but provides additional details) 64 # if you need the log to go to a file instead of on screen, define lldb.formatters.Logger._lldb_formatters_debug_filename to a valid filename
65 -class Logger:
66 - def __init__(self,autoflush=False,logcaller=False):
67 global _lldb_formatters_debug_level 68 global _lldb_formatters_debug_filename 69 self.autoflush = autoflush 70 want_log = False 71 try: 72 want_log = (_lldb_formatters_debug_level > 0) 73 except: 74 pass 75 if not (want_log): 76 self.impl = NopLogger() 77 return 78 want_file = False 79 try: 80 want_file = (_lldb_formatters_debug_filename != None and _lldb_formatters_debug_filename != '' and _lldb_formatters_debug_filename != 0) 81 except: 82 pass 83 if want_file: 84 self.impl = FileLogger(_lldb_formatters_debug_filename) 85 else: 86 self.impl = StdoutLogger() 87 try: 88 self.autoflush = (_lldb_formatters_debug_level > 1) 89 except: 90 self.autoflush = autoflush 91 want_caller_info = False 92 try: 93 want_caller_info = (_lldb_formatters_debug_level > 2) 94 except: 95 pass 96 if want_caller_info: 97 self._log_caller()
98
99 - def _log_caller(self):
100 caller = inspect.stack()[2] 101 try: 102 if caller != None and len(caller) > 3: 103 self.write('Logging from function ' + str(caller)) 104 else: 105 self.write('Caller info not available - Required caller logging not possible') 106 finally: 107 del caller # needed per Python docs to avoid keeping objects alive longer than we care
108
109 - def write(self,data):
110 self.impl.write(data) 111 if self.autoflush: 112 self.flush()
113
114 - def __rshift__(self,data):
115 self.write(data)
116
117 - def flush(self):
118 self.impl.flush()
119
120 - def close(self):
121 self.impl.close()
122