aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/sys/unix/race.go
AgeCommit message (Collapse)AuthorFilesLines
2017-05-04initial commitRastislav Szabo1-0/+30
Signed-off-by: Rastislav Szabo <raszabo@cisco.com>
ref='#n55'>55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
import sys
import os
import logging

def prepare_dir(log_path):
    log_dir = os.path.dirname(log_path)
    if not os.path.exists(log_dir):
        os.makedirs(log_dir)

def setup_custom_logger(name, log_path = None):
    # first make sure path availabe
    if log_path:
        prepare_dir(log_path)
    logging.basicConfig(level   = logging.INFO, 
                        format  = '%(asctime)s %(name)-10s %(module)-20s %(levelname)-8s %(message)s',
                        datefmt = '%m-%d %H:%M')
#                       filename= log_path,
#                       filemode= 'w')
#
#   # define a Handler which writes INFO messages or higher to the sys.stderr
#   consoleLogger = logging.StreamHandler()
#   consoleLogger.setLevel(logging.ERROR)
#   # set a format which is simpler for console use
#   formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
#   # tell the handler to use this format
#   consoleLogger.setFormatter(formatter)
#
#   # add the handler to the logger
#   logging.getLogger(name).addHandler(consoleLogger)

def setup_daemon_logger (name, log_path = None):
    # first make sure path availabe
    if log_path:
        prepare_dir(log_path)
        try:
            os.unlink(log_path)
        except:
            pass
    logging.basicConfig(level   = logging.INFO, 
                        format  = '%(asctime)s %(name)-10s %(module)-20s %(levelname)-8s %(message)s',
                        datefmt = '%m-%d %H:%M',
                        filename= log_path,
                    filemode= 'w')

class CustomLogger(object):
  
    def __init__(self, log_filename):
        # Store the original stdout and stderr
        sys.stdout.flush()
        sys.stderr.flush()

        self.stdout_fd = os.dup(sys.stdout.fileno())
        self.devnull = os.open('/dev/null', os.O_WRONLY)
        self.log_file = open(log_filename, 'w')
        self.silenced = False
        self.pending_log_file_prints = 0

    # silence all prints from stdout
    def silence(self):
        os.dup2(self.devnull, sys.stdout.fileno())
        self.silenced = True

    # restore stdout status
    def restore(self):
        sys.stdout.flush()
        sys.stderr.flush()
        # Restore normal stdout
        os.dup2(self.stdout_fd, sys.stdout.fileno())
        self.silenced = False

    #print a message to the log (both stdout / log file)
    def log(self, text, force = False, newline = True):
        self.log_file.write((text + "\n") if newline else text)
        self.pending_log_file_prints += 1

        if (self.pending_log_file_prints >= 10):
             self.log_file.flush()
             self.pending_log_file_prints = 0

        self.console(text, force, newline)

    # print a message to the console alone
    def console(self, text, force = False, newline = True):
        _text = (text + "\n") if newline else text
        # if we are silenced and not forced - go home
        if self.silenced and not force:
            return

        if self.silenced:
            os.write(self.stdout_fd, _text)
        else:
            sys.stdout.write(_text)

        sys.stdout.flush()

    # flush
    def flush(self):
        sys.stdout.flush()
        self.log_file.flush()

    def __exit__(self, type, value, traceback):
        sys.stdout.flush()
        self.log_file.flush()
        os.close(self.devnull)
        os.close(self.log_file)