简体   繁体   English

为什么它会打印两次相同的日志?

[英]Why does it print the same log twice?

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.我必须通过格式化程序执行 an.upperCase(),但我不明白为什么它打印相同的消息但没有上层,因为我已经确定它只使用它。

I am using java util test.我正在使用 java 实用程序测试。

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: 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!

You can remove unwanted handlers by calling getHandlers() and iterating through that list, calling removeHandler() on any you don't want.您可以通过调用getHandlers()并遍历该列表来删除不需要的处理程序,对任何您不需要的调用removeHandler() 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.它可以防止系统操作员(“sysop”)从外部配置您的应用程序。 This is a very user hostile app.这是一个非常用户敌对的应用程序。 Use this only during debugging when you have no other choice.仅在您别无选择时在调试期间使用此选项。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM