Przechwytywanie wyjątków do pliku .log

Odpowiedz Nowy wątek
2015-01-29 23:09
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

edytowany 2x, ostatnio: arooscroocked, 2015-01-29 23:15

Pozostało 580 znaków

2015-01-30 08:21
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);
        }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2015-01-30 08:21

Pozostało 580 znaków

2015-01-30 10:43
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");
Ale to rozwiązanie wymaga chyba zmiany kodu w każdym catchu piszącym na ekran. - bogdans 2015-01-30 10:49
Ale jest to porządny logger, a nie ordynarny sysout. W dodatku nie wykrzaczy się przy jakiś magiach wątkowych (przynajmniej w teorii). - Koziołek 2015-01-30 10:55
Zgoda, to jest właściwe rozwiązanie jeśli pomyślisz o logowaniu na starcie projektu. - bogdans 2015-01-30 10:59
a później mam zawsze możliwość zrobić replace all na całym projekcie. - Koziołek 2015-01-30 11:00

Pozostało 580 znaków

2015-01-30 12:28
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?

Pozostało 580 znaków

2015-01-30 12:44
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.

Pozostało 580 znaków

2015-01-30 13:34
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
edytowany 1x, ostatnio: arooscroocked, 2015-01-30 13:37

Pozostało 580 znaków

2015-01-30 14:18
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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