22# CodeWriter21
33
44import io as _io
5+ import os as _os
56import logging as _logging
67
7- from typing import Union as _Union , Dict as _Dict
8+ from typing import Union as _Union , Dict as _Dict , Type as _Type
89
910import log21 .CrashReporter as CrashReporter
1011
2122from log21 .Formatters import ColorizingFormatter , DecolorizingFormatter
2223from log21 .Colors import Colors , get_color , get_colors , ansi_escape , get_color_name , closest_color
2324
24- __version__ = "2.4.2 "
25+ __version__ = "2.4.3 "
2526__author__ = "CodeWriter21 (Mehrad Pooryoussof)"
2627__github__ = "Https://GitHub.com/MPCodeWriter21/log21"
2728__all__ = ['ColorizingStreamHandler' , 'DecolorizingFileHandler' , 'ColorizingFormatter' , 'DecolorizingFormatter' ,
3940
4041def _prepare_formatter (fmt : str = None , style : str = '%' , datefmt : str = "%H:%M:%S" , show_level : bool = True ,
4142 show_time : bool = True , colorize_time_and_level : bool = True ,
42- level_names : _Dict [int , str ] = None ):
43+ level_names : _Dict [int , str ] = None ,
44+ formatter_class : _Type [_logging .Formatter ] = ColorizingFormatter ):
4345 # Prepares a formatting if the fmt was None
4446 if not fmt :
4547 style = '%'
@@ -50,8 +52,10 @@ def _prepare_formatter(fmt: str = None, style: str = '%', datefmt: str = "%H:%M:
5052 fmt = "[%(asctime)s] " + fmt
5153 fmt = '\r ' + fmt
5254 # Defines the formatter
53- formatter = ColorizingFormatter (fmt , datefmt , style = style , level_names = level_names )
54- if not colorize_time_and_level :
55+ formatter = formatter_class (fmt , datefmt , style = style )
56+ if isinstance (formatter , Formatters ._Formatter ):
57+ formatter .level_names = level_names
58+ if not colorize_time_and_level and isinstance (formatter , ColorizingFormatter ):
5559 for key in formatter .level_colors :
5660 formatter .level_colors [key ] = tuple ()
5761 formatter .time_color = tuple ()
@@ -62,7 +66,8 @@ def _prepare_formatter(fmt: str = None, style: str = '%', datefmt: str = "%H:%M:
6266def get_logger (name : str = '' , level : _Union [int , str ] = NOTSET , show_time : bool = True ,
6367 show_level : bool = True , colorize_time_and_level : bool = True , fmt : str = None ,
6468 datefmt : str = "%H:%M:%S" , style : str = '%' , handle_carriage_return : bool = True ,
65- handle_new_line : bool = True , override = False , level_names : _Dict [int , str ] = None ) -> Logger :
69+ handle_new_line : bool = True , override = False , level_names : _Dict [int , str ] = None ,
70+ file : _Union [_os .PathLike , str ] = None ) -> Logger :
6671 """
6772 Returns a logging.Logger with colorizing support.
6873 >>>
@@ -121,6 +126,7 @@ def get_logger(name: str = '', level: _Union[int, str] = NOTSET, show_time: bool
121126 else
122127 :param override: bool = True: Overrides the logger attributes even if it already exists
123128 :param level_names: Dict[int, str] = None: You can specify custom level names.
129+ :param file: Union[os.PathLike, str] = None: The file to log to
124130 :return: log21.Logger
125131 """
126132 if not isinstance (name , str ):
@@ -138,6 +144,14 @@ def get_logger(name: str = '', level: _Union[int, str] = NOTSET, show_time: bool
138144 handler .setFormatter (formatter )
139145 logger .addHandler (handler )
140146 _manager .addLogger (name , logger )
147+
148+ if file :
149+ file_handler = FileHandler .FileHandler (file )
150+ file_formatter = _prepare_formatter (fmt , style , datefmt , show_level , show_time , False , level_names ,
151+ formatter_class = Formatters .DecolorizingFormatter )
152+ file_handler .setFormatter (file_formatter )
153+ logger .addHandler (file_handler )
154+
141155 return logger
142156
143157
@@ -257,7 +271,7 @@ def tree_print(obj, indent: int = 4, mode='-', colors: _Dict[str, str] = None, e
257271
258272def basic_config (force : bool = False , encoding : str = None , errors : str = 'backslashreplace' , handlers = None ,
259273 stream = None , filename = None , filemode : str = 'a' , date_format : str = "%H:%M:%S" , style : str = '%' ,
260- format_ : str = None , level : int = None ):
274+ format_ : str = None , level : _Union [ int , str ] = None ):
261275 """
262276 Do basic configuration for the logging system.
263277
0 commit comments