Home > Software engineering >  Why does it print the same log twice?
Why does it print the same log twice?

Time:05-26

I have to do an .upperCase() through a formatter, but I don't understand why it prints the same message but without the upper, since I have established that it uses only that.

I am using java util test.

public DatabaseAccessProxy(String pass, DatabaseAccess database) throws SecurityException, IOException {
        this.logged = false;
        this.pass = pass;
        this.database = database;
        manejador = new ConsoleHandler();   
        fileManejador = new FileHandler("C:/Users/ignac/OneDrive/Escritorio/OO2/Practica 6/logs");
        manejador.setFormatter(new ShoutingSimpleFomatter());
        fileManejador.setFormatter(new JSONFormater());
        Logger.getLogger("app.main").addHandler(manejador);
    }
public class ShoutingSimpleFomatter extends SimpleFormatter {
    
    @Override
    public String format(LogRecord record) {
        return super.format(record).toUpperCase();
    }
    
}

Output:

MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY INSERTNEWROW
ADVERTENCIA: ACCESO VALIDO PARA LA INSERCION!
may. 25, 2022 8:06:42 P. M. ar.edu.unlp.info.oo2.accesobd.DatabaseAccessProxy insertNewRow
ADVERTENCIA: Acceso valido para la insercion!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY GETSEARCHRESULTS
INFORMACIÓN: ACCESO VALIDO PARA LA BUSQUEDA!
may. 25, 2022 8:06:42 P. M. ar.edu.unlp.info.oo2.accesobd.DatabaseAccessProxy getSearchResults
INFORMACIÓN: Acceso valido para la busqueda!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY GETSEARCHRESULTS
INFORMACIÓN: ACCESO VALIDO PARA LA BUSQUEDA!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY GETSEARCHRESULTS
INFORMACIÓN: ACCESO VALIDO PARA LA BUSQUEDA!
may. 25, 2022 8:06:42 P. M. ar.edu.unlp.info.oo2.accesobd.DatabaseAccessProxy getSearchResults
INFORMACIÓN: Acceso valido para la busqueda!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY GETSEARCHRESULTS
INFORMACIÓN: ACCESO VALIDO PARA LA BUSQUEDA!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY GETSEARCHRESULTS
INFORMACIÓN: ACCESO VALIDO PARA LA BUSQUEDA!
may. 25, 2022 8:06:42 P. M. ar.edu.unlp.info.oo2.accesobd.DatabaseAccessProxy getSearchResults
INFORMACIÓN: Acceso valido para la busqueda!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY LOGIN
GRAVE: ACCESO INVALIDO A LA BASE DE DATOS!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY LOGIN
GRAVE: ACCESO INVALIDO A LA BASE DE DATOS!
MAY. 25, 2022 8:06:42 P. M. AR.EDU.UNLP.INFO.OO2.ACCESOBD.DATABASEACCESSPROXY LOGIN
GRAVE: ACCESO INVALIDO A LA BASE DE DATOS!
may. 25, 2022 8:06:42 P. M. ar.edu.unlp.info.oo2.accesobd.DatabaseAccessProxy login
GRAVE: Acceso invalido a la base de datos!

CodePudding user response:

You can remove unwanted handlers by calling getHandlers() and iterating through that list, calling removeHandler() on any you don't want. The default handlers are normally added at the root logger which is named "" (an empty string).

public class LoggerHandlers {
   
   public static void main( String[] args ) {
      // clean slate, remove all
      Logger root = Logger.getLogger( "" );
      Handler[] handlers = root.getHandlers();
      for( Handler h : handlers )
         root.removeHandler( h );
      Logger.getLogger( LoggerHandlers.class.getName() ).warning( "Test" );
   }
   
}

However, this is normally a very bad idea. It prevents a system operator ("sysop") from externally configuring your application. This is a very user hostile app. Use this only during debugging when you have no other choice.

  •  Tags:  
  • java
  • Related