Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
 def iget_def_res_log(self):
     return arr_lambda_by_name(my_settings.RESPONSE_FIELDS,response_fields)
Ejemplo n.º 5
0
 def iget_def_req_log(self):
     return arr_lambda_by_name(my_settings.REQUEST_FIELDS,request_fields)
Ejemplo n.º 6
0
 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))
Ejemplo n.º 7
0
 def iget_def_res_log(self):
     return arr_lambda_by_name(my_settings.RESPONSE_FIELDS, response_fields)
Ejemplo n.º 8
0
 def iget_def_req_log(self):
     return arr_lambda_by_name(my_settings.REQUEST_FIELDS, request_fields)
Ejemplo n.º 9
0
    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)