En el trabajo, a menudo se encuentran situaciones de manejo caos Excepción:
- De cualquier excepciones golondrina, no se imprimen cualquier registro;
- Cuando cualquiera de registro, nivel de registro es erróneo, o para matar importante información de la pila de errores, haciendo la solución de problemas de producción, simplemente te hace volver loco.
Tengo este blog, es también un registro de componentes de código abierto, K anormal por su cuenta, porque yo pasé un largo tiempo de resolución de problemas - https://www.cnblogs.com/chongsha/p/11931109.html
Aquí se utiliza una pieza de código 1 tomado como ejemplo, el código es informal búsqueda de Internet, el autor original no se ofenda.
1 / * 2 * cifrado 3 * 1. configurado generador de clave 4 * Los ecnodeRules reglas de inicialización generador de claves 5 * 3. Generar clave 6 * 4. crear e inicializar el aleatorizador 7 * El cifrado del contenido 8 * 6. retorno de la cadena . 9 * / 10 pública estática cadena AESEncode (cadena encodeRules, cadena de contenido) { . 11 el try { 12 se // 1. generador de claves configurado, designado como el algoritmo AES insensibles 13 es el KeyGenerator keygen = la KeyGenerator .getInstance ( "el AES" ); 14 // 2. los ecnodeRules reglas de inicialización generador de clave 15 // genera a-128 bit fuente aleatoria, basado en la matriz de bytes entrante 16 keygen.init (128, nuevo nuevo un SecureRandom (encodeRules.getBytes ())); . 17 // 3. clave simétrica para generar el original 18 es un SecretKey original_key = keygen.generateKey (); . 19 // 4. clave simétrica para obtener el byte originales matriz 20 es byte [] RAW = original_key.getEncoded (); 21 es // 5. se genera la matriz de bytes de acuerdo con una clave AES 22 es una clave SecretKey = nuevo nuevo SecretKeySpec (RAW, "AES" ); 23 es // 6. El AES algoritmo especificado de en el módulo de cifrado 24 el sistema de cifrado de cifrado = Cipher.getInstance ( "el AES" ); 25 //7. La inicialización scrambler, el primer parámetro es encriptada (ENCRYPT_MODE) o operación de descifrado descifrado (DECRYPT_MODE), el segundo parámetro utilizado para la tecla 26 es cipher.init (Cipher.ENCRYPT_MODE, Key); 27 // 8. El cifrado adquirido matriz de bytes contenidos (ajustado aquí a UTF-8) de lo contrario, si el contenido de la mezcla y chino Inglés serán descifrados al chino distorsión 28 byte [] = content.getBytes byte_encode ( "UTF-8". ); 29 // . 9 según inicializado Encryptor - cifrado: el cifrado de datos 30 byte [] = byte_AES Cipher.doFinal (byte_encode); 31 es // 10. los datos cifrados se convierte en una cadena de 32 // en el presente documento encontrarán uso Base64Encoder menos de un paquete 33 // solución: 34 // en la trayectoria Build del proyecto para eliminar la biblioteca del sistema JRE, y luego añadir la biblioteca de la biblioteca del Sistema JRE, recompilación después de todo normal. 35 Cadena AES_encode = nuevo String ( nuevo Base64Encoder () encode (byte_AES).); 36 // 11.将字符串返回 37 de retorno AES_encode; 38 } catch (NoSuchAlgorithmException e) { 39 e.printStackTrace (); 40 } catch (NoSuchPaddingException e) { 41 e.printStackTrace (); 42 } catch (InvalidKeyException e) { 43 e.printStackTrace (); 44 } catch (IllegalBlockSizeException e) { 45 e.printStackTrace (); 46 es } la captura (BadPaddingException E) { 47 e.printStackTrace (); 48 } la captura (UnsupportedEncodingException E) { 49 e.printStackTrace (); 50 } 51 es 52 es // Si hay errores, Devolución nulll 53 es retorno nulo ; 54 es }
El principal problema es que las secciones del código:
- Comimos una excepción, ya que es una clase pública, ni siquiera el registro
- Después de una excepción, todavía devuelve un valor nulo.
Este método es cuando solemos utilizar, si usted no lee el código fuente directamente, el primer instinto es devolver el resultado correcto, si no es correcta, se producirá una excepción. nula Sin embargo, este código ha vuelto, la experiencia del usuario será loco, esto es lo que ah, por qué no, obviamente no hay ningún error, la desesperación, una mirada en el código. . . El original es deshacerse de lo anormal.
Este código es, hacer recomendaciones de mejora son:
- Declaración de lanza en el enfoque es
- Si se siente incómodo programa 1, dirigir una gran excepción captura, y luego tirar nueva RuntimeException (e.getMessage (), e);
- Está mal está mal, el error no puede matar a mí mismo, y luego devuelve un valor nulo.
Cuando cualquiera de registro, nivel de registro es erróneo, o para matar importante información de la pila de errores, haciendo la solución de problemas de producción, simplemente te hace volver loco.
Cuando se utiliza el registro de log4j, utilice el logger.error correcta () para el registro, por favor preste atención a reemplazar este método, no utilice el getMessage Excepción () método sólo registra el mensaje de esta excepción, y la excepción a la pila de error de abandonar, pila de errores inusual es una información útil, que le dirá qué líneas de código en el mal, para que pueda localizar rápidamente el error.
1 paquete com.demo; 2 3 público clase de prueba { 4 5 público estáticas void principales (args String []) { 6 try { 7 int a = 0 ; 8 int b = 1 ; 9 10 System.out.println (b / a); 11 } catch (Exception e) { 12 e.printStackTrace (); 13 } 14 } 15 16 }
Esta información del código de pila de errores:
java.lang.ArithmeticException: / por cero
en com.demo.Test.main (Test.java:10)
Este mensaje de error de línea en com.demo.Test.main (Test.java:10) marcó el lugar equivocado, puede localizar rápidamente en cualquier lugar. Así que cuando el registro en, por favor no deshacerse de la pila mensaje de error.