Przechwytywanie wyjątków do pliku .log

0

Witajcie,

Piszę właśnie program na zaliczenie i mam problem z funkcjonalnością taką jak w temacie, tj. przechwytywania wyjątków i błędów do jakiegoś loga. Mam taki przykładowy kod operujący podłączeniem db.

private void connectToDatabase() throws SQLException {
         try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e){
            dbConnection = null;
            System.exit(0);
        }
        
        try{
            dbConnection= DriverManager.getConnection("jdbc:postgresql://localhost:2014/postgres", "postgres","1234");
            statement = dbConnection.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
            
        } catch (SQLException e) {
            System.out.println("Database Error: "+e.getMessage());
            System.exit(0);
        }
    }

Czy ktoś mógłby mi poradzić jak mogę zrealizować takie zapisywanie wyjątku do pliku? Byłbym bardzo wdzięczny.
Przepraszam za ewentualne błędy formatowania oraz te wynikające z nieznajomości forum-code. To mój pierwszy post.

Pozdrawiam

0

Jedna z możliwości, to przekierowanie standardowego wyjścia do pliku:

        PrintStream standard = System.out; //zapamiętanie standardowego wyjście, by móc przywrócić
        PrintStream file = null;
        try
        {
            file = new PrintStream(new File("log.txt"));
            System.setOut(file);    
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
2

A może użyj tego co dostarcza API?

Logger anonymousLogger = Logger.getAnonymousLogger();
anonymousLogger.addHandler(new FileHandler("d:/tmp/my.log", true));
anonymousLogger.info("Prosty loger");
0
Koziołek napisał(a):

A może użyj tego co dostarcza API?

Logger anonymousLogger = Logger.getAnonymousLogger();
anonymousLogger.addHandler(new FileHandler("d:/tmp/my.log", true));
anonymousLogger.info("Prosty loger");

Koziołku, czy dobrze rozumiem, że taki logger powinien wskoczyć w catch każdego wyjątku?

0

Sam Logger można zrobić tak:

// gdzieś na starcie aplikacji inicjujesz logger w mechanizmie:
Logger.getLogger("my error log").addHandler(new FileHandler("d:/tmp/my.log", true)); 
// i potem w bloku catch:
Logger.getLogger("my error log").log(Level.Serve, "something goes wrong" , e);

sama konstrukcja Logger.getLogger("my error log") może zostać sprowadzona do jakiejś statycznej metody na poziomie aplikacji.

0

Zrobiłem tak jak pokazałeś i niby działa, niby loguje ale log wędruje domyślnie tylko do konsoli (korzystam z netbeansa) a nie do pliku :(

run:
sty 30, 2015 1:27:40 PM lab12.DatabaseGUIExample connectToDatabase
SEVERE: something goes wrong
0

SOA#1: u mnie działa. Sprawdź czy NB stworzył plik i nie ma opóźnień zapisu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1