示例#1
0
def setLogLevelFromConfig():
    """Set the log level based on the current configuration.
	"""
    if globalVars.appArgs.logLevel != 0 or globalVars.appArgs.secure:
        # Log level was overridden on the command line or we're running in secure mode,
        # so don't set it.
        return
    import config
    levelName = config.conf["general"]["loggingLevel"]
    level = levelNames.get(levelName)
    if not level or level > log.INFO:
        log.warning("invalid setting for logging level: %s" % levelName)
        level = log.INFO
        config.conf["general"]["loggingLevel"] = levelNames[log.INFO]
    log.setLevel(level)
示例#2
0
def setLogLevelFromConfig():
	"""Set the log level based on the current configuration.
	"""
	if globalVars.appArgs.logLevel != 0 or globalVars.appArgs.secure:
		# Log level was overridden on the command line or we're running in secure mode,
		# so don't set it.
		return
	import config
	levelName=config.conf["general"]["loggingLevel"]
	level = levelNames.get(levelName)
	if not level or level > log.INFO:
		log.warning("invalid setting for logging level: %s" % levelName)
		level = log.INFO
		config.conf["general"]["loggingLevel"] = levelNames[log.INFO]
	log.setLevel(level)
示例#3
0
    def _set_log_level(self, *args, **kwargs):
        level_name = kwargs.get('level')
        level = None

        if isinstance(level_name, int):
            if level_name in _levelNames:
                level = level_name
        elif isinstance(level_name, basestring):
            level_name = level_name.upper()
            level = _levelNames.get(level_name)

        if level is None:
            raise UnexpectedError('Invalid logging level supplied')

        log.setLevel(level)
        return 'Set logging level to %s' % level
示例#4
0
    def _set_log_level(self, *args, **kwargs):
        level_name = kwargs.get('level')
        level = None

        if isinstance(level_name, int):
            if level_name in _levelNames:
                level = level_name
        elif isinstance(level_name, basestring):
            level_name = level_name.upper()
            level = _levelNames.get(level_name)

        if level is None:
            raise UnexpectedError('Invalid logging level supplied')

        log.setLevel(level)
        return 'Set logging level to %s' % level
示例#5
0
def setLogLevelFromConfig():
	"""Set the log level based on the current configuration.
	"""
	if globalVars.appArgs.debugLogging or globalVars.appArgs.logLevel != 0 or globalVars.appArgs.secure or globalVars.appArgs.noLogging:
		# Log level was overridden on the command line or we're running in secure mode,
		# so don't set it.
		return
	import config
	levelName=config.conf["general"]["loggingLevel"]
	level = levelNames.get(levelName)
	# The lone exception to level higher than INFO is "OFF" (100).
	# Setting a log level to something other than options found in the GUI is unsupported.
	if level not in (log.DEBUG, log.IO, log.DEBUGWARNING, log.INFO, log.OFF):
		log.warning("invalid setting for logging level: %s" % levelName)
		level = log.INFO
		config.conf["general"]["loggingLevel"] = levelNames[log.INFO]
	log.setLevel(level)
示例#6
0
def init(**kwargs):
    """
    初始化日志
    :param {string} log_file: 日志文件的名称(为空则屏幕输出日志)
    :param {string} logger_name: 指定日志名称(默认为 root)
    :param {bool} append: 是否追加日志,默认为 True (追加到旧日志文件后面), 设置为 False 时会先删除旧日志文件
    :param {bool | string} level: 日志级别,默认级别:INFO
                           (为布尔值时表示是否debug模式,True:DEBUG, False:INFO,为字符串时可选值为:"NOTSET"/"DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL")
    :param {int} backupCount: 日志文件保留天数
    :param {tuple<string,int | list<int>>} socket: 把日志发往远程机器上(ip/host,端口号)(为空则不发)
    :param {dict} syslog: 把日志发往远程SysLog上的init配置(为空则不发)
    :param {int} log_max: 单条日志长度限制(超出部分截取,设为0则不限制)
    :param {bool} to_read: 是否要将字符串转码成便于人阅读的编码(将 “\u65f6”,“\xE5\x8C\x85”等字符转为人可以阅读的文字), 默认不转换
    :param {bool} color: 是否输出有颜色的日志(颜色得按这里的规则指定)
                         目前仅支持 black(黑色),red(红色),green(绿色),yellow(黃色),blue(蓝色),fuchsia(紫红色),cyan(青蓝色),white(白色)
    :param {string} format: 日志输出格式
    :param {bool} remove_screen: 是否去掉屏幕输出的日志, 默认不去除
    """
    global CONFIG
    logger_name = kwargs.get('logger_name', None)
    # root 日志时,保存到全局
    if not logger_name:
        CONFIG.update(kwargs)
    log_file = kwargs.get('log_file', None)
    append = kwargs.get('append', CONFIG.get('append', True))
    level = kwargs.get('level', CONFIG.get('level', 'INFO'))
    backupCount = kwargs.get('backupCount', CONFIG.get('backupCount', 30))
    socket_config = kwargs.get('socket', None)
    syslog_config = kwargs.get('syslog', None)
    format = kwargs.get('format', CONFIG.get('format', format_str))
    remove_screen = kwargs.get('remove_screen',
                               CONFIG.get('remove_screen', False))

    # logging提供多种级别的日志信息,如: NOTSET(值为0), DEBUG(10), INFO(20), WARNING(默认值30), ERROR(40), CRITICAL(50)等。每个级别都对应一个数值。
    logger = getLogger(logger_name, add_parent_filter=False)
    # 设置log级别
    logger_level = logging.INFO
    if level == True:
        logger_level = logging.DEBUG
    #传入字符串时的log级别
    elif isinstance(level, basestring):
        level = str(level).strip().upper()
        log_level = _levelNames.get(level, logging.INFO)
        logger_level = log_level
    # 传入 int 类型,则可以直接设置级别
    elif isinstance(level, (int, long)):
        logger_level = level
    else:
        logger_level = logging.INFO
    # 添加日志字符串过滤器(本过滤器已经添加过的话就先去掉,避免多次过滤字符串)
    logger_name = logger_name or ''
    logger.filters[:] = [
        filter for filter in logger.filters
        if not isinstance(filter, StringFilter)
    ]
    logger.addFilter(StringFilter(name=logger_name, **kwargs))
    if logger_name:
        logger.setLevel(logger_level)
    # 设置log格式
    #formatter = logging.Formatter(format, '%d %H:%M:%S') # 为了显示毫秒数,最好不要自己另外设置日期格式,一旦设置就显示不出了
    formatter = logging.Formatter(format)
    # 去掉屏幕输出日志,提高效率
    remove_stream_handler(remove_screen, logger, level)
    # 发送socket日志
    if socket_config:
        socket_host, socket_port = socket_config
        add_socket_handler(socket_host, socket_port, logger_level, logger)
    # 发送syslog日志
    if syslog_config:
        add_syslog_handler(logger_level, logger, **syslog_config)
    # 设置log文件
    add_file_handler(log_file, logger_level, append, backupCount, formatter,
                     logger)