LogManager logger schreibt nicht in Catch() Zweig

ralfb1105

Bekanntes Mitglied
Hallo zusammen,

ich versuche mittels Java Logger Class Log Meldungen meiner Applikation auszugeben, was auch prinzipiell funktioniert. Wenn ich allerdings in einem catch() Zweig eine Log Meldung schreiben will wird diese nicht geschrieben!?

Hier meine Logging Konfiguration:
Java:
private static Logger logWriter = Logger.getLogger(OraSimpleBench.class.getName());
Java:
final InputStream inputStream = OraSimpleBench.class.getResourceAsStream("/logging.properties");
        try
        {
            LogManager.getLogManager().readConfiguration(inputStream);
        }
        catch (final IOException ex) {
            Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
            Logger.getAnonymousLogger().severe(ex.getMessage());
        }
Wenn ich z.B. in einem if-else den Logger aufrufe wird alles in das Log File geschrieben:
Java:
if (pingExitCode == 0) {
                    logWriter.info("Task DB Connect: Try to ping database host: Success!");
                    publish("Task DB Connect: Try to ping database host: Success!");
                       
                } else {
                    logWriter.severe("Task DB Connect: Try to ping database host: Failed with Exit Code: " + pingExitCode);
                       publish("Task DB Connect: Try to ping database host:\n");
                       publish("Ping Failed with Exit Code " + pingExitCode + "\n");
                       jLStatusDbConnect.setIcon(new ImageIcon(getClass().getClassLoader().getResource(iconNotOk)));
                       jBTestDBconnect.setEnabled(true);
                       cancel(true);
                }
So sieht dann der Log Eintrag aus, einmal OK und einmal nicht OK:
Code:
[Mon Apr 30 18:07:40 CEST 2018] INFO: Task DB Connect: Try to ping database host: Success!

[Mon Apr 30 18:16:28 CEST 2018] SEVERE: Task DB Connect: Try to ping database host: Failed with Exit Code: 2

Wenn ich das nun aus einem try-catch Block versuche, wird der SQL Stack Trace auf der Konsole (jTextArea) ausgegeben, aber keine Infos in das Log File geschrieben ???
Java:
DB db = new DB(jTAOutput, jLStatusDbConnect);
                Connection conn=db.dbConnect(connectString, dbUser, dbPwd);
                try {
                    conn.setAutoCommit(false);
                    logWriter.info("Task DB Connect: Try connect to: " + connectString + " as user: " + dbUser + " : Success!");
                    publish("Task DB Connect: Try connect to: " + connectString + " as user: " + dbUser + " : Success!");
                    //jLStatusDbConnect.setIcon(new ImageIcon(getClass().getClassLoader().getResource(iconOk)));
                }
                catch (SQLException ex) {
                    logWriter.severe(ex.getMessage());
                    jLStatusDbConnect.setIcon(new ImageIcon(getClass().getClassLoader().getResource(iconNotOk)));
                   
                    logWriter.severe("Task DB Connect: Try connect to: " + connectString + " as user: " + dbUser + " : Failed");
                    publish("Task DB Connect: Try connect to: " + connectString + " as user: " + dbUser + " : Failed");
                    String msg = String.valueOf(ex);
                    publish(msg);
                    jBTestDBconnect.setEnabled(true);
                    cancel(true);
                }
Die Ausgaben wenn es gut geht (try) werden in das Log File geschrieben:
Code:
[Mon Apr 30 18:16:47 CEST 2018] INFO: Task DB Connect: Try connect to: jdbc:oracle:thin:@192.168.56.37:1521/orclmac1 as user: hr
[Mon Apr 30 18:16:48 CEST 2018] INFO: Task DB Connect: Try connect to: jdbc:oracle:thin:@192.168.56.37:1521/orclmac1 as user: hr : Success!

Hat jemand eine Idee was ich hier falsch mache und die Log Einträge nicht geschrieben werden?

Danke im Voraus für Eure Hilfe!

Gruß

Ralf
 
Ich sehe da keinen Grund, warum das nicht auch ins LogFile geschrieben werden sollte.

Wie sehen denn die properties aus?
 
Hallo mrBrown,

genau so habe ich ich auch gedacht als ich gemerkt habe das bei einem Fehler beim DB connect keine Log Meldungen geschrieben werden. Heute Morgen ist mir dann eingefallen warum es nicht funktioniert, und wie immer war es natürlich ein Anfänger Fehler der vor dem Computer sitzt 😕

Ich habe vergessen das der DB Connection Aufbau über die Klasse "DB" abgewickelt wird:
Java:
DB db = new DB(jTAOutput, jLStatusDbConnect);
                Connection conn=db.dbConnect(connectString, dbUser, dbPwd);
In dieser Klasse wird dann schon die SQL Exception geworfen wenn z.B. das DB User Password falsch ist:
Java:
public Connection dbConnect(String db_connect_string, String db_userid, String db_password)
        {
             try
             {
                        DriverManager.registerDriver(
                          new oracle.jdbc.OracleDriver());
                         
                        Connection conn = DriverManager.getConnection(db_connect_string, db_userid, db_password);
                        if (conn != null) {
                            //System.out.format("OK!\n");
                            //jLStatusDbConnect.setIcon(new ImageIcon(getClass().getClassLoader().getResource("oracle/OK25.png")));
                            return conn;
                        } else {
                            //System.out.format("FAILED TO CONNECT!\n\n");
                            return null;
                        }                       
                }
                catch (SQLException e)
                {
                        //System.out.format("FAILED TO CONNECT!\n\n");
                        logWriter.severe("DB connection clas: Failed to connect!");
                        logWriter.severe(e.getMessage());
                        jLStatusDbConnect.setIcon(new ImageIcon(getClass().getClassLoader().getResource("oracle/NotOK25.png")));
                        jTAOutput.append("DB connetion class: Failed to connect!");
                        String msg = String.valueOf(e);
                        jTAOutput.append(msg);
                        return null;
                }              
        }
In dieser Klasse hatte ich im catch() Zweig die Excpeption auf die "Console" (jTAOutput TextArea) ausgegeben, aber leider beim Implementieren vergessen auch in dieser Klasse den logWriter einzufügen 😉

Nachdem ich das jetzt wie oben gezeigt gemacht habe, wird nun auch die SQL Exception geloggt:
Code:
[Tue May 01 10:10:59 CEST 2018] INFO: Task DB Connect: Try connect to: jdbc:oracle:thin:@192.168.56.37:1521/orclmac1 as user: hr
[Tue May 01 10:11:01 CEST 2018] SEVERE: DB connection class: Failed to connect!
[Tue May 01 10:11:01 CEST 2018] SEVERE: ORA-01017: Benutzername/Kennwort ungültig; Anmeldung abgelehnt

Danke für Deine Meinung zu dem Problem!!

Gruß

Ralf
 

Anhänge

  • image.png
    image.png
    83 Bytes · Aufrufe: 62

Zurück
Oben