Przechwytywanie wyjątków do pliku .log

Przechwytywanie wyjątków do pliku .log
AR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3
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.

Kopiuj
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

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
        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);
        }
Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6823
2

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

Kopiuj
Logger anonymousLogger = Logger.getAnonymousLogger();
anonymousLogger.addHandler(new FileHandler("d:/tmp/my.log", true));
anonymousLogger.info("Prosty loger");
AR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3
0
Koziołek napisał(a):

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

Kopiuj
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?

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6823
0

Sam Logger można zrobić tak:

Kopiuj
// 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.

AR
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3
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 :(

Kopiuj
run:
sty 30, 2015 1:27:40 PM lab12.DatabaseGUIExample connectToDatabase
SEVERE: something goes wrong
Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6823
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.