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)
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)
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
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)
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)