I am trying to do logging in python.
# class CustomFormatter is to change timezoneclass CustomFormatter(logging.Formatter): def converter(self, timestamp): dt = datetime.fromtimestamp(timestamp, tz=get_localzone()) return dt.astimezone(pytz.timezone('America/New_York')) def formatTime(self, record, datefmt=None): dt = self.converter(record.created) if datefmt: s = dt.strftime(datefmt) else: try: s = dt.isoformat(timespec='milliseconds') except TypeError: s = dt.isoformat() return sdef logging_config(log_filename, log_level, log_format = '%(asctime)s.%(msecs)03d - %(levelname)s - %(message)s', date_format='%Y%m%d_%H:%M:%S'): # Create a logger object logger = logging.getLogger() # Configure the logging level logger.setLevel(log_level) # Create a file handler file_handler = logging.FileHandler(log_filename) # Create a stream handler (to display logs in the notebook) stream_handler = logging.StreamHandler() # Create the custom formatter formatter = CustomFormatter(log_format, datefmt=date_format) # Set the formatter for both handlers file_handler.setFormatter(formatter) stream_handler.setFormatter(formatter) # Set the logging level for both handlers file_handler.setLevel(log_level) stream_handler.setLevel(log_level) # Add both handlers to the logger logger.addHandler(file_handler) logger.addHandler(stream_handler) return loggerdef logging_test(logger): # Log messages logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message') return 0if __name__ == '__main__': log_filename = './log_test.log' print('log_filename*', log_filename) log_format = '%(asctime)s.%(msecs)03d - %(levelname)s - %(message)s' logger = logging_config(log_filename = log_filename, log_format = log_format, log_level = logging.DEBUG, #INFO, date_format="%Y%m%d_%H%M%S") logging_test(logger)
When I use log_level = logging.DEBUG it does not work for me and pruduces only:
$ ipython local_functions.py
log_filename* ./log_test.log
(base)
when I use logging.INFO or higher levels it works as expected:
log_filename* ./log_test.log
20240104_211453.256 - INFO - This is an info message
20240104_211453.261 - WARNING - This is a warning message
20240104_211453.261 - ERROR - This is an error message
20240104_211453.262 - CRITICAL - This is a critical message
What might be a problem?Thanks!