nielsMedlem sedan juli 2000215 inlägg
Sitter med servlets och skulle behöva dirigera om allt som skrivs till System.out till den PrintWriter som jag får från response.getWriter(); (Behöver göra detta för att få mina debug mess...)
Känner till funktionen System.setOut men vet inte hur jag skall använda den med en PrintWriter.
Annars vore jag tacksam om ngn vet var tomcat lägger sina (om den gör det) loggar över System.out och System.err under Linux. Eller om ngn vet hur man konfigurerar tomcat till att logga detta.
/Niels
TomasJMedlem sedan feb. 200563 inlägg
Re: Redirecta System.out
niels skrev:
Sitter med servlets och skulle behöva dirigera om allt som skrivs till System.out till den PrintWriter som jag får från response.getWriter(); (Behöver göra detta för att få mina debug mess...)
Känner till funktionen System.setOut men vet inte hur jag skall använda den med en PrintWriter.
Annars vore jag tacksam om ngn vet var tomcat lägger sina (om den gör det) loggar över System.out och System.err under Linux. Eller om ngn vet hur man konfigurerar tomcat till att logga detta.
Parametern till System.setOut är en PrintStream så då kan du skicka in en subklass till PrintStream som delegerar vidare anropen till din PrintWriter. Jag tror att något sånt här skulle kunna fungera:
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
PrintWriter p = resp.getWriter();
System.setOut(new MyPrintStream(System.out, p));
System.out.println("Hello World MyPrintStream"); // kommer att delegera till p.println
}
public class MyPrintStream extends PrintStream {
private PrintWriter pw;
public MyPrintStream(PrintStream p, PrintWriter pw)
{
super(p);
this.pw = pw;
}
public void println(String s) {
//super.println(s); Avkommentera om du dessutom vill printa till vanliga System.out
pw.println("<br>" + s);
}
}
}
För övrigt föreslår jag att du använder en loggningskomponent som kommer att fungera med alla servlet-motorer, t.ex. Log4j
istället för att t.ex. försöka få tomcat att logga allt som skrivs till System.out, och istället för att använda ovanstående kodexempel, som dock borde fungera om du nu absolut vill göra på det viset...
Om du vill ha möjlighet att enkelt byta loggningskomponent så kan du välja att programmera mot
Jakarta Commons Logging istället för att använda Log4j direkt.
/ Tomas
TomasJMedlem sedan feb. 200563 inlägg
Re: Redirecta System.out
Dessutom kan du förresten enkelt debugga tomcat-applikationer om du använder eclipse.
Och det är förstås ännu bättre om man ser till att dela upp sin applikation i flera lager, så att själva webblagret som är beroende av servlet-klasser och dylikt inte innehåller någon logik utan bara delegerar vidare till andra "vanliga" klasser d.v.s. klasser som man enkelt då kan testa via ett konsol-program eller JUnit -tester utan att "behöva" köra i en servlet-container.
Å andra sidan behöver man inte absolut nödvändigtvis köra servlet-klassen via en servlet-motor eftersom man kan låta s.k. mock-objekt implementera interfacen som skickas in till doPost och doGet-metoderna.
Exempelvis innehåller det populära ramverket Spring en klass MockHttpServletRequest som implementerar interfacet HttpServletRequest.
/ Tomas
nielsMedlem sedan juli 2000215 inlägg