# Module `onionr.logger`

Onionr - Private P2P Communication

This file handles all operations involving logging

Source code

    '''
        Onionr - Private P2P Communication

        This file handles all operations involving logging
    '''
    '''
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <https://www.gnu.org/licenses/>.
    '''

    import sys, traceback

    from . import colors, readline, log, raw, confirm, colors, settings
    colors = colors.Colors
    readline = readline.readline
    log = log.log
    raw = raw.raw
    confirm = confirm.confirm

    # debug: when there is info that could be useful for debugging purposes only
    def debug(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_DEBUG):
        if settings.get_level() <= level:
            log('/', data, timestamp = timestamp, prompt = prompt, terminal = terminal)
        if not error is None:
            debug('Error: ' + str(error) + parse_error())

    # info: when there is something to notify the user of, such as the success of a process
    def info(data: str, timestamp = False, prompt = True, terminal = False, level = settings.LEVEL_INFO):
        if settings.get_level() <= level:
            log('+', data, colors.fg.green, timestamp = timestamp, prompt = prompt, terminal = terminal)

    # warn: when there is a potential for something bad to happen
    def warn(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_WARN):
        if not error is None:
            debug('Error: ' + str(error) + parse_error())
        if settings.get_level() <= level:
            log('!', data, colors.fg.orange, timestamp = timestamp, prompt = prompt, terminal = terminal)

    # error: when only one function, module, or process of the program encountered a problem and must stop
    def error(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_ERROR):
        if settings.get_level() <= level:
            log('-', data, colors.fg.red, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal)
        if not error is None:
            debug('Error: ' + str(error) + parse_error())

    # fatal: when the something so bad has happened that the program must stop
    def fatal(data: str, error = None, timestamp=True, prompt = True, terminal = False, level = settings.LEVEL_FATAL):
        if not error is None:
            debug('Error: ' + str(error) + parse_error(), terminal = terminal)
        if settings.get_level() <= level:
            log('#', data, colors.bg.red + colors.fg.green + colors.bold, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal)

    # returns a formatted error message
    def parse_error():
        details = traceback.extract_tb(sys.exc_info()[2])
        output = ''

        for line in details:
            output += '\n    ... module %s in  %s:%i' % (line[2], line[0], line[1])

        return output

## Sub-modules

`onionr.logger.colors`

  Onionr - Private P2P Communication …

`onionr.logger.confirm`

  Onionr - Private P2P Communication …

`onionr.logger.log`

  Onionr - Private P2P Communication …

`onionr.logger.raw`

  Onionr - Private P2P Communication …

`onionr.logger.readline`

  Onionr - Private P2P Communication …

`onionr.logger.settings`

  Onionr - Private P2P Communication …

## Functions

`def debug(data, error=None, timestamp=True, prompt=True, terminal=False, level=1)`
  Source code

      def debug(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_DEBUG):
          if settings.get_level() <= level:
              log('/', data, timestamp = timestamp, prompt = prompt, terminal = terminal)
          if not error is None:
              debug('Error: ' + str(error) + parse_error())

`def error(data, error=None, timestamp=True, prompt=True, terminal=False, level=4)`
  Source code

      def error(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_ERROR):
          if settings.get_level() <= level:
              log('-', data, colors.fg.red, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal)
          if not error is None:
              debug('Error: ' + str(error) + parse_error())

`def fatal(data, error=None, timestamp=True, prompt=True, terminal=False, level=5)`
  Source code

      def fatal(data: str, error = None, timestamp=True, prompt = True, terminal = False, level = settings.LEVEL_FATAL):
          if not error is None:
              debug('Error: ' + str(error) + parse_error(), terminal = terminal)
          if settings.get_level() <= level:
              log('#', data, colors.bg.red + colors.fg.green + colors.bold, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal)

`def info(data, timestamp=False, prompt=True, terminal=False, level=2)`
  Source code

      def info(data: str, timestamp = False, prompt = True, terminal = False, level = settings.LEVEL_INFO):
          if settings.get_level() <= level:
              log('+', data, colors.fg.green, timestamp = timestamp, prompt = prompt, terminal = terminal)

`def parse_error()`
  Source code

      def parse_error():
          details = traceback.extract_tb(sys.exc_info()[2])
          output = ''

          for line in details:
              output += '\n    ... module %s in  %s:%i' % (line[2], line[0], line[1])

          return output

`def warn(data, error=None, timestamp=True, prompt=True, terminal=False, level=3)`
  Source code

      def warn(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_WARN):
          if not error is None:
              debug('Error: ' + str(error) + parse_error())
          if settings.get_level() <= level:
              log('!', data, colors.fg.orange, timestamp = timestamp, prompt = prompt, terminal = terminal)