def _process_exception(self, exception, exR, close_name=my_settings.REQ_LOG_NAME): #save head exception information def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_FIELDS, exception_fields) glog.err([my_settings.EXCEPTION_TOP_NAME] + arr_funcs_call(def_exc_log, exception)) #save frames info def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_STACK_FIELDS, exception_fields) frames = exR.get_traceback_frames() frames.reverse() for frame in frames: glog.err([my_settings.EXCEPTION_MIDDLE_NAME] + arr_funcs_call(def_exc_log, frame, exR)) #save close info def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_CLOSE, exception_fields) self.mid_c_log(close_name, arr_funcs_call(def_exc_log, exception, exR)) if my_settings.FLUSH_RESPONSE: glog.flush()
def _process_exception(self,exception,exR,close_name=my_settings.REQ_LOG_NAME): #save head exception information def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_FIELDS,exception_fields) glog.err([my_settings.EXCEPTION_TOP_NAME]+arr_funcs_call(def_exc_log,exception)) #save frames info def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_STACK_FIELDS,exception_fields) frames = exR.get_traceback_frames() frames.reverse() for frame in frames: glog.err([my_settings.EXCEPTION_MIDDLE_NAME]+arr_funcs_call(def_exc_log,frame,exR)) #save close info def_exc_log = arr_lambda_by_name(my_settings.EXCEPTION_CLOSE,exception_fields) self.mid_c_log(close_name,arr_funcs_call(def_exc_log,exception,exR)) if my_settings.FLUSH_RESPONSE: glog.flush()
def process_request(self,request): self.mid_a_log(my_settings.VIEW_LOG_NAME,arr_funcs_call(arr_lambda_by_name(my_settings.VIEW_OPEN_FIELDS,view_open_fields),request))
def iget_def_res_log(self): return arr_lambda_by_name(my_settings.RESPONSE_FIELDS,response_fields)
def iget_def_req_log(self): return arr_lambda_by_name(my_settings.REQUEST_FIELDS,request_fields)
def process_request(self, request): self.mid_a_log( my_settings.VIEW_LOG_NAME, arr_funcs_call( arr_lambda_by_name(my_settings.VIEW_OPEN_FIELDS, view_open_fields), request))
def iget_def_res_log(self): return arr_lambda_by_name(my_settings.RESPONSE_FIELDS, response_fields)
def iget_def_req_log(self): return arr_lambda_by_name(my_settings.REQUEST_FIELDS, request_fields)
def __init__(self, # path ( template ) to log file in file system # copied into action_log_template property # action_log_file = converted real file path # action_log_fh = current filehandle action_log, # list of levels which will be logged # default is ['crt', 'err', 'imp', 'inf', 'log', 'trc', 'dbg'] level=None, # the log level which will be used if Logger object used # as function # means glog() is equal to glog.log() in case # default_level = 'log' # stored into def_log_call property as function default_level='log', # list of levels which will be actually saved into # the log file if it is None the all levels will be stored. loglev=None, # list of fields name or function which fill be put # in every log row right after parent index. # list of possible name can be found in ucsvlog.fields.every # but you can also use your own function as string name # of link # this list ['stacksize','fname','filename','lineno'] # will be used if None passed # pass an empty list in case you don't want to store call info # stored into same name property, but converted into functions func_fields=None, # using in codes.open(buffering=???) # http://docs.python.org/library/codecs.html#codecs.open # which is the same as for buildin function open # http://docs.python.org/library/functions.html#open # and save into action_log_buffering buffering=0, # related folder is using for save related file paths # in call info # saved into same name property but add '/' at the end # if doesn't have related_folder=None, # True - if you want to store one block in different files. # useful for logging long terms blocks, # like long working cron scripts # False - if you want to store one block in one file # useful in short terms block, like http requests # saved into same name property splitting_blocks=False, # if this value is not None then every row will have # with value as last cell # using in Reader object to be sure that the row is # 100% valid and not broken # saved into same name property close_row=None, ): self.splitting_blocks = splitting_blocks self.close_row = close_row if related_folder is not None: related_folder = os.path.abspath(related_folder) if not related_folder.endswith('/'): related_folder += '/' self.related_folder = related_folder self.action_log_template = action_log self.action_log_buffering = buffering self.action_log_file = None self.action_log_fh = None if loglev is None: loglev = [ 'crt', # critical error 'err', # error 'imp', # important information 'inf', # information 'log', # base log 'trc', # trace some data 'dbg' # debug information ] if level is None: level = loglev if isinstance(level, int): level = loglev[:level] if func_fields is None: func_fields = ['stacksize', 'fname', 'filename', 'lineno'] self._aindex_stack = [] # generate write functions or empty function # depends on loglev and level input parameters for logname in loglev: if logname in level: setattr(self, logname, self.lbd_tlog(logname)) setattr(self, 'a_' + logname, self.lbd_alog(logname)) setattr(self, 'c_' + logname, self.lbd_clog(logname)) else: setattr(self, logname, lambda *args, **kwargs: None) setattr(self, 'a_' + logname, lambda *args, **kwargs: None) setattr(self, 'c_' + logname, lambda *args, **kwargs: None) self.def_log_call = getattr(self, default_level) self.func_fields = arr_lambda_by_name(func_fields, every)