Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4363798

logging APIs: Level.OFF level is not treated as the special level

XMLWordPrintable

    • beta
    • sparc
    • solaris_7
    • Verified



      Name: abR10010 Date: 08/18/2000



      The Java Logging APIs specification for java.util.logging.Level
      class says:
      "...
      OFF
          public static final Level OFF
          
          OFF is a special level that can be used to turn off logging.
      ..."


      But the nsk/logging/Logger/isLoggable/isloggable001 test shows
      that this assertion is violated for the special case:
      when OFF level is set for Logger the isLoggable(checked_level)
      method returns true value instead of false value if the checked_level
      value is equal to OFF level value.

      Next, the simple nsk/log_test test shows that
      logger.log(Level.OFF, message) method logs the message
      despite the OFF level is set.

      It means that OFF level is not treated as the special level
      that can be used to turn off logging in accordance with
      the specification.

      See logs and tests sources:

      % java isloggable001 -vbs
      ==> nsk/logging/Logger/isLoggable/isloggable001 test LOG:
      ==> test checks the isLoggable() method of Logger class
          of the java.util.logging package for named Logger

      --> isloggable001: checked levels set =
      --> name = OFF, value = 2147483647
      --> name = SEVERE, value = 1000
      --> name = WARNING, value = 900
      --> name = INFO, value = 800
      --> name = CONFIG, value = 700
      --> name = FINE, value = 500
      --> name = FINER, value = 400
      --> name = FINEST, value = 300
      --> name = ALL, value = -2147483648
      --> name = non_standart_level, value = 999
      --> name = non_standart_off_level, value = 2147483647
       
      --> isloggable001: check isLoggable() method for levels set when OFF level (value=2147483647) is set...
      ##> isloggable001: Unexpected isLoggable(checked_level) method result = true
      ##> checked_level: name = OFF, value = 2147483647
      ##> isloggable001: Unexpected isLoggable(checked_level) method result = true
      ##> checked_level: name = non_standart_off_level, value = 2147483647
       
      --> isloggable001: check isLoggable() method for levels set when SEVERE level (value=1000) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when WARNING level (value=900) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when INFO level (value=800) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when CONFIG level (value=700) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when FINE level (value=500) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when FINER level (value=400) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when FINEST level (value=300) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when ALL level (value=-2147483648) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when non_standart_level level (value=999) is set...
      --> isloggable001: check PASSED!

      --> isloggable001: check isLoggable() method for levels set when non_standart_off_level level (value=2147483647) is
      set...
      ##> isloggable001: Unexpected isLoggable(checked_level) method result = true
      ##> checked_level: name = OFF, value = 2147483647
      ##> isloggable001: Unexpected isLoggable(checked_level) method result = true
      ##> checked_level: name = non_standart_off_level, value = 2147483647
       
      ==> nsk/logging/Logger/isLoggable/isloggable001 test FAILED


      % java log_test
      ==> nsk/log_test LOG:
      --> log_test: logger.setLevel(Level.OFF) - done!
      --> log_test: logger.getLevel() = OFF, 2147483647
      --> log_test: logger.log(Level.SEVERE, "SEVERE_message") will be...

      --> log_test: logger.log(Level.OFF, "OFF_message") will be...
      18.08.2000 11:33:05 my_logger
      OFF: OFF_message

      ==> nsk/log_test finished!


      The nsk/logging/Logger/isLoggable/isloggable001 test sourse:
      ===============================================================================
      // File: %Z%%M% %I% %E%
      // Copyright %G% Sun Microsystems, Inc. All Rights Reserved

      //package logging.Logger.isLoggable;

      import java.util.logging.*;

      public class isloggable001 {

          static String test_full_name = "logging.Logger.isLoggable.isloggable001";
          static boolean verbose_mode = false; // test argument -vbs or -verbose switches to true
                                                // - for more easy failure evaluation
          static Logger s_test_named_logger;
          static String level_names[] = {
              "OFF",
              "SEVERE",
              "WARNING",
              "INFO",
              "CONFIG",
              "FINE",
              "FINER",
              "FINEST",
              "ALL",
              "non_standart_level",
              "non_standart_off_level"
          };
          static int level_values[] = new int[level_names.length];
          static Level levels[] = new Level[level_names.length];
          
          private static void print_log_on_verbose(String message) {
              if ( verbose_mode ) {
                  System.out.println("--> isloggable001: " + message);
              }
          }
          
          private static void print_log_without_verbose(String message) {
              if ( ! verbose_mode ) {
                  System.out.println("--> isloggable001: " + message);
              }
          }
          
          public static int run(String argv[], java.io.PrintStream out) {
              int v_test_result = 0/*STATUS_PASSED*/;
              int error_check_count = 0;
              int error_count;

              System.out.println("==> nsk/logging/Logger/isLoggable/isloggable001 test LOG:");
              System.out.println("==> test checks the isLoggable() method of Logger class");
              System.out.println(" of the java.util.logging package for named Logger\n");
              
              for (int i=0; i<argv.length; i++) {
                  if ( argv[i].equals("-vbs") || argv[i].equals("-verbose") ) {
                      verbose_mode = true;
                      break;
                  }
              }

              int off_level_value = Level.OFF.intValue();
              Level non_standart_level = new NonStandartLevel("non_standart_level", 999);
              Level non_standart_off_level = new NonStandartLevel("non_standart_off_level", off_level_value);

              for (int level_index=0; level_index < level_names.length; level_index++) {
                  levels[level_index] = Level.parse(level_names[level_index]);
                  level_values[level_index] = levels[level_index].intValue();
              }
              
              String logger_name = "logging.Logger.isLoggable.isloggable001";
              s_test_named_logger = Logger.getLogger(logger_name);
              Level checked_level = null,
                      set_level = null;
              boolean is_loggable;

              if ( verbose_mode ) {
                  System.out.println("--> isloggable001: checked levels set =");
                  for (int checked_level_index=0; checked_level_index < levels.length; checked_level_index++) {
                      System.out.println
                          ("--> name = " + level_names[checked_level_index]
                          + ", value = " + level_values[checked_level_index]);
                  }
                  System.out.println(" ");
              }

              for (int set_level_index=0; set_level_index < levels.length; set_level_index++) {
                  print_log_on_verbose
                      ("check isLoggable() method for levels set when "
                      + level_names[set_level_index] + " level (value="
                      + level_values[set_level_index] + ") is set...");
                  set_level = levels[set_level_index];
                  s_test_named_logger.setLevel(set_level);
                  error_count = 0;
                  for (int checked_level_index=0; checked_level_index < levels.length; checked_level_index++) {
                      checked_level = levels[checked_level_index];
                      is_loggable = s_test_named_logger.isLoggable(checked_level);
                      boolean is_error = false;
                      if ( is_loggable ) {
                          if ( level_values[set_level_index] == off_level_value ) {
                              is_error = true;
                          }
                          else {
                              if ( level_values[checked_level_index] < level_values[set_level_index] ) {
                                  is_error = true;
                              }
                          }
                      }
                      if ( is_error ) {
                          if ( error_count == 0 ) {
                              print_log_without_verbose
                                  ("check isLoggable() method for levels set when "
                                  + level_names[set_level_index] + " level (value="
                                  + level_values[set_level_index] + ") is set...");
                          }
                          error_count++;
                          System.out.println
                              ("##> isloggable001: Unexpected isLoggable(checked_level) method result = "
                              + is_loggable);
                          System.out.println
                              ("##> checked_level: name = " + level_names[checked_level_index]
                              + ", value = " + level_values[checked_level_index]);
                      }
                  }
                  if ( error_count == 0 ) {
                      print_log_on_verbose("check PASSED!\n");
                  }
                  else {
                      System.out.println(" ");
                      error_check_count++;
                  }
              }

              if ( error_check_count != 0 ) {
                  v_test_result = 2/*STATUS_FAILED*/;
              }
              else {
                  System.out.println("--> isloggable001: all checks for isLoggable() method PASSED!");
              }

              if ( v_test_result == 2/*STATUS_FAILED*/ ) {
                  System.out.println("==> nsk/logging/Logger/isLoggable/isloggable001 test FAILED");
              }
              else {
                  System.out.println("==> nsk/logging/Logger/isLoggable/isloggable001 test PASSED");
              }
              return v_test_result;
          }

          public static void main(String argv[]) {
              System.exit(run(argv, System.out) + 95/*STATUS_TEMP*/);
          }

      } // end of isloggable001 class


      class NonStandartLevel extends Level {
          public NonStandartLevel(String level_name, int level_value) {
              super(level_name, level_value);
          }
      } // end of NonStandartLevel class
      ===============================================================================


      The nsk/log_test test sourse:
      ===============================================================================
      // File: %Z%%M% %I% %E%
      // Copyright %G% Sun Microsystems, Inc. All Rights Reserved

      import java.util.logging.*;

      public class log_test {

          static LogManager glob_log_manager;
          static Logger logger;
          
          public static void main(String argv[]) {
              System.out.println("==> nsk/log_test LOG:");
              
              glob_log_manager = LogManager.getLogManager();
              logger = Logger.getLogger("my_logger");

              logger.setLevel(Level.OFF);
              System.out.println
                  ("--> log_test: logger.setLevel(Level.OFF) - done!");

              System.out.println
                  ("--> log_test: logger.getLevel() = " + logger.getLevel().toString()
                  + ", " + logger.getLevel().intValue());

              System.out.println
                  ("--> log_test: logger.log(Level.SEVERE, \"SEVERE_message\") will be...");
              logger.log(Level.SEVERE, "SEVERE_message");

              System.out.println("");
              System.out.println
                  ("--> log_test: logger.log(Level.OFF, \"OFF_message\") will be...");
              logger.log(Level.OFF, "OFF_message");

              glob_log_manager.flush();

              System.out.println("");
              System.out.println("==> nsk/log_test finished!");
          }
      } // end of log_test class
      ===============================================================================


       
      ======================================================================

      Name: elR10090 Date: 02/01/2001


      This bug affects the following testbase_nsk test:
          nsk/logging/Level/OFF/off001


      ======================================================================

            ghamiltosunw Graham Hamilton (Inactive)
            bondsunw Bond Bond (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: