import logging
import os
import re
import sys
import time
import gflags
from base import scheduler
from base import thread_util
scheduler.Scheduler.CreateGlobalInstance()
_LOG_LEVELS = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']
gflags.DEFINE_string(
'log_dir', '/tmp/log',
'')
# TODO: test None.
gflags.DEFINE_enum(
'log', 'info', [l.lower() for l in _LOG_LEVELS] + [''],
'Log level sent to stderr.')
gflags.DEFINE_integer(
'log_threads_freq', None,
'If set, stack traces of all active threads are logged, at debug level, '
'every given number of seconds.')
FLAGS = gflags.FLAGS
def ConfigureLogging():
logging.root.setLevel(logging.NOTSET)
if FLAGS.log:
logging.root.addHandler(
_CreateStdErrHandler(FLAGS.log.upper()))
if FLAGS.log_dir:
if not os.path.isdir(FLAGS.log_dir):
os.makedirs(FLAGS.log_dir)
for log_level_name in _LOG_LEVELS:
logging.root.addHandler(
_CreateFileHandler(FLAGS.log_dir, log_level_name))
if FLAGS.log_threads_freq:
scheduler.Scheduler.INSTANCE.RunEvery(FLAGS.log_threads_freq, lambda: (
logging.debug('Active threads:\n%s',
thread_util.FormatStackTraceOfAllThreads())))
def IsDebug():
return logging.root.handlers[0].level <= logging.DEBUG
def _CreateStdErrHandler(log_level_name):
stderr = logging.StreamHandler()
stderr.setFormatter(_Formatter())
stderr.setLevel(_LogLevel(log_level_name))
return stderr
def _CreateFileHandler(log_dir, log_level_name):
path = os.path.join(log_dir, '%s.%s' % (
os.path.basename(sys.argv[0]), log_level_name))
file_handler = logging.FileHandler(path)
file_handler.setFormatter(_Formatter())
file_handler.setLevel(_LogLevel(log_level_name))
return file_handler
def _LogLevel(log_level_name):
return getattr(logging, (log_level_name))
import os
import re
import sys
import time
import gflags
from base import scheduler
from base import thread_util
scheduler.Scheduler.CreateGlobalInstance()
_LOG_LEVELS = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG']
gflags.DEFINE_string(
'log_dir', '/tmp/log',
'')
# TODO: test None.
gflags.DEFINE_enum(
'log', 'info', [l.lower() for l in _LOG_LEVELS] + [''],
'Log level sent to stderr.')
gflags.DEFINE_integer(
'log_threads_freq', None,
'If set, stack traces of all active threads are logged, at debug level, '
'every given number of seconds.')
FLAGS = gflags.FLAGS
def ConfigureLogging():
logging.root.setLevel(logging.NOTSET)
if FLAGS.log:
logging.root.addHandler(
_CreateStdErrHandler(FLAGS.log.upper()))
if FLAGS.log_dir:
if not os.path.isdir(FLAGS.log_dir):
os.makedirs(FLAGS.log_dir)
for log_level_name in _LOG_LEVELS:
logging.root.addHandler(
_CreateFileHandler(FLAGS.log_dir, log_level_name))
if FLAGS.log_threads_freq:
scheduler.Scheduler.INSTANCE.RunEvery(FLAGS.log_threads_freq, lambda: (
logging.debug('Active threads:\n%s',
thread_util.FormatStackTraceOfAllThreads())))
def IsDebug():
return logging.root.handlers[0].level <= logging.DEBUG
def _CreateStdErrHandler(log_level_name):
stderr = logging.StreamHandler()
stderr.setFormatter(_Formatter())
stderr.setLevel(_LogLevel(log_level_name))
return stderr
def _CreateFileHandler(log_dir, log_level_name):
path = os.path.join(log_dir, '%s.%s' % (
os.path.basename(sys.argv[0]), log_level_name))
file_handler = logging.FileHandler(path)
file_handler.setFormatter(_Formatter())
file_handler.setLevel(_LogLevel(log_level_name))
return file_handler
def _LogLevel(log_level_name):
return getattr(logging, (log_level_name))