Avatar billede jespersahner Nybegynder
14. januar 2008 - 16:24 Der er 10 kommentarer og
1 løsning

Skrive System.err/System.out til ekstern fil

Findes der en nem måde, hvorpå System.err og/eller System.out kan skrives til en fil? Jeg er med på, at jeg kan fifle med koden direkte, men jeg tænker her mere i VM Options.

Jeg har konkret behov for at logge alle exceptions i en ekstern fil.
Avatar billede arne_v Ekspert
14. januar 2008 - 16:33 #1
1) shell redirect

java -cp /where/ever minpakke.MinKlasse > out

2) kode

System.setOut

3) logging framework
Avatar billede arne_v Ekspert
14. januar 2008 - 16:33 #2
Jeg vil anbefale #3 !
Avatar billede jespersahner Nybegynder
14. januar 2008 - 16:55 #3
->arne_v: Ok, jeg vil egentlig gerne bruge #3, men jeg ønsker konkret ikke omfattende ændringer af de enkelte klasser med individuel logning osv. men blot helt overordnet en "rå" log over alle exceptions i en ekstern fil. Er det nemt med #3 med en stump kode placeret i main-klassen?
Avatar billede arne_v Ekspert
14. januar 2008 - 17:03 #4
Hvis din exception handling logik er at håndtere alle exceptions i main, så er det nemt.

Ellers er det straks mere tricky.

En mulighed i nogen situationer at er bruge AOP til at tilføje logging med.
Avatar billede jespersahner Nybegynder
14. januar 2008 - 17:12 #5
->arne_v: Exceptions håndteres i de enkelte klasser, men kan man ikke bruge en fælles logger/handler alle steder i programmet? (jeg har endnu ikke fordybet mig i denne del af Java)
Avatar billede arne_v Ekspert
14. januar 2008 - 18:27 #6
Her kommer et lille eksempel til inspiration.
Avatar billede arne_v Ekspert
14. januar 2008 - 18:28 #7
Demo.java
---------

public class Demo
{
    public void sub2() {
        try {
            throw new Exception("2");
        } catch(Exception ex) {
            System.out.println("Regular: " + ex.getMessage());
        }
    }
    public void sub1() {
        try {
            sub2();
            throw new Exception("1");
        } catch(Exception ex) {
            System.out.println("Regular: " + ex.getMessage());
        }
    }
    public static void main(String[] args) {
        Demo o = new Demo();
        o.sub1();
    }
}
Avatar billede arne_v Ekspert
14. januar 2008 - 18:28 #8
GlobalExceptionLogger.aj
------------------------

public aspect GlobalExceptionLogger {
    before(Exception e) : handler(Exception) && args(e) {
        System.out.println("Special: " + e.getMessage());
    }
}
Avatar billede arne_v Ekspert
14. januar 2008 - 18:29 #9
C:\e\aop_exceptions>javac Demo.java

C:\e\aop_exceptions>java Demo
Regular: 2
Regular: 1

C:\e\aop_exceptions>ajc Demo.java GlobalExceptionLogger.aj

C:\e\aop_exceptions>java Demo
Special: 2
Regular: 2
Special: 1
Regular: 1
Avatar billede jespersahner Nybegynder
14. januar 2008 - 20:33 #10
->arne_v: Tak for svar. Her og nu jagter jeg nogle fejl, som jeg skal have fundet ret hurtigt, så jeg "hopper på" redirect af System.out og System.err, og når lejligheden byder sig vil jeg sætte mig lidt mere ind i logger/handler-delen, som givetvis er den rigtige tilgang. Smid lige et svar.
Avatar billede arne_v Ekspert
14. januar 2008 - 20:40 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester