1# Copyright 2017 The Abseil Authors. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15import logging 16from typing import Any, Callable, Dict, NoReturn, Optional, Tuple, TypeVar, Union 17 18from absl import flags 19 20# Logging levels. 21FATAL: int 22ERROR: int 23WARNING: int 24WARN: int # Deprecated name. 25INFO: int 26DEBUG: int 27 28ABSL_LOGGING_PREFIX_REGEX: str 29 30LOGTOSTDERR: flags.FlagHolder[bool] 31ALSOLOGTOSTDERR: flags.FlagHolder[bool] 32LOG_DIR: flags.FlagHolder[str] 33VERBOSITY: flags.FlagHolder[int] 34LOGGER_LEVELS: flags.FlagHolder[Dict[str, str]] 35STDERRTHRESHOLD: flags.FlagHolder[str] 36SHOWPREFIXFORINFO: flags.FlagHolder[bool] 37 38 39def get_verbosity() -> int: 40 ... 41 42 43def set_verbosity(v: Union[int, str]) -> None: 44 ... 45 46 47def set_stderrthreshold(s: Union[int, str]) -> None: 48 ... 49 50 51# TODO(b/277607978): Provide actual args+kwargs shadowing stdlib's logging functions. 52def fatal(msg: Any, *args: Any, **kwargs: Any) -> NoReturn: 53 ... 54 55 56def error(msg: Any, *args: Any, **kwargs: Any) -> None: 57 ... 58 59 60def warning(msg: Any, *args: Any, **kwargs: Any) -> None: 61 ... 62 63 64def warn(msg: Any, *args: Any, **kwargs: Any) -> None: 65 ... 66 67 68def info(msg: Any, *args: Any, **kwargs: Any) -> None: 69 ... 70 71 72def debug(msg: Any, *args: Any, **kwargs: Any) -> None: 73 ... 74 75 76def exception(msg: Any, *args: Any, **kwargs: Any) -> None: 77 ... 78 79 80def log_every_n(level: int, msg: Any, n: int, *args: Any) -> None: 81 ... 82 83 84def log_every_n_seconds( 85 level: int, msg: Any, n_seconds: float, *args: Any 86) -> None: 87 ... 88 89 90def log_first_n(level: int, msg: Any, n: int, *args: Any) -> None: 91 ... 92 93 94def log_if(level: int, msg: Any, condition: Any, *args: Any) -> None: 95 ... 96 97 98def log(level: int, msg: Any, *args: Any, **kwargs: Any) -> None: 99 ... 100 101 102def vlog(level: int, msg: Any, *args: Any, **kwargs: Any) -> None: 103 ... 104 105 106def vlog_is_on(level: int) -> bool: 107 ... 108 109 110def flush() -> None: 111 ... 112 113 114def level_debug() -> bool: 115 ... 116 117 118def level_info() -> bool: 119 ... 120 121 122def level_warning() -> bool: 123 ... 124 125 126level_warn = level_warning # Deprecated function. 127 128 129def level_error() -> bool: 130 ... 131 132 133def get_log_file_name(level: int = ...) -> str: 134 ... 135 136 137def find_log_dir_and_names( 138 program_name: Optional[str] = ..., log_dir: Optional[str] = ... 139) -> Tuple[str, str, str]: 140 ... 141 142 143def find_log_dir(log_dir: Optional[str] = ...) -> str: 144 ... 145 146 147def get_absl_log_prefix(record: logging.LogRecord) -> str: 148 ... 149 150 151_SkipLogT = TypeVar('_SkipLogT', str, Callable[..., Any]) 152 153def skip_log_prefix(func: _SkipLogT) -> _SkipLogT: 154 ... 155 156 157_StreamT = TypeVar("_StreamT") 158 159 160class PythonHandler(logging.StreamHandler[_StreamT]): 161 162 def __init__( 163 self, 164 stream: Optional[_StreamT] = ..., 165 formatter: Optional[logging.Formatter] = ..., 166 ) -> None: 167 ... 168 169 def start_logging_to_file( 170 self, program_name: Optional[str] = ..., log_dir: Optional[str] = ... 171 ) -> None: 172 ... 173 174 def use_absl_log_file( 175 self, program_name: Optional[str] = ..., log_dir: Optional[str] = ... 176 ) -> None: 177 ... 178 179 def flush(self) -> None: 180 ... 181 182 def emit(self, record: logging.LogRecord) -> None: 183 ... 184 185 def close(self) -> None: 186 ... 187 188 189class ABSLHandler(logging.Handler): 190 191 def __init__(self, python_logging_formatter: PythonFormatter) -> None: 192 ... 193 194 def format(self, record: logging.LogRecord) -> str: 195 ... 196 197 def setFormatter(self, fmt) -> None: 198 ... 199 200 def emit(self, record: logging.LogRecord) -> None: 201 ... 202 203 def flush(self) -> None: 204 ... 205 206 def close(self) -> None: 207 ... 208 209 def handle(self, record: logging.LogRecord) -> bool: 210 ... 211 212 @property 213 def python_handler(self) -> PythonHandler: 214 ... 215 216 def activate_python_handler(self) -> None: 217 ... 218 219 def use_absl_log_file( 220 self, program_name: Optional[str] = ..., log_dir: Optional[str] = ... 221 ) -> None: 222 ... 223 224 def start_logging_to_file(self, program_name=None, log_dir=None) -> None: 225 ... 226 227 228class PythonFormatter(logging.Formatter): 229 230 def format(self, record: logging.LogRecord) -> str: 231 ... 232 233 234class ABSLLogger(logging.Logger): 235 236 def findCaller( 237 self, stack_info: bool = ..., stacklevel: int = ... 238 ) -> Tuple[str, int, str, Optional[str]]: 239 ... 240 241 def critical(self, msg: Any, *args: Any, **kwargs: Any) -> None: 242 ... 243 244 def fatal(self, msg: Any, *args: Any, **kwargs: Any) -> NoReturn: 245 ... 246 247 def error(self, msg: Any, *args: Any, **kwargs: Any) -> None: 248 ... 249 250 def warn(self, msg: Any, *args: Any, **kwargs: Any) -> None: 251 ... 252 253 def warning(self, msg: Any, *args: Any, **kwargs: Any) -> None: 254 ... 255 256 def info(self, msg: Any, *args: Any, **kwargs: Any) -> None: 257 ... 258 259 def debug(self, msg: Any, *args: Any, **kwargs: Any) -> None: 260 ... 261 262 def log(self, level: int, msg: Any, *args: Any, **kwargs: Any) -> None: 263 ... 264 265 def handle(self, record: logging.LogRecord) -> None: 266 ... 267 268 @classmethod 269 def register_frame_to_skip( 270 cls, file_name: str, function_name: str, line_number: Optional[int] = ... 271 ) -> None: 272 ... 273 274 275# NOTE: Returns None before _initialize called but shouldn't occur after import. 276def get_absl_logger() -> ABSLLogger: 277 ... 278 279 280# NOTE: Returns None before _initialize called but shouldn't occur after import. 281def get_absl_handler() -> ABSLHandler: 282 ... 283 284 285def use_python_logging(quiet: bool = ...) -> None: 286 ... 287 288 289def use_absl_handler() -> None: 290 ... 291