как распечатать логи в приложении сервлета tomcat - PullRequest
0 голосов
/ 02 декабря 2010

Я создаю сервлет на Tomcat 6.0 в Ubuntu 10.04. Для печати журнала я использовал System.setOut для перенаправления вывода.

System.setOut(new PrintStream(new File("/tmp/new.log")));

System.setErr(new PrintStream(new File("/tmp/new.log")));

Я должен использовать этот код в doPost (), но когда я запускаю свое приложение, я не вижу вывода, поэтому временно я переместил этот код в doGet ().

Когда я нажимаю URL через браузер http://127.0.0.1:8080/hello/hello В браузере появляется следующая ошибка

java.security.AccessControlException: access denied (java.io.FilePermission /tmp/new1.log read)
    java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)
    java.security.AccessController.checkPermission(AccessController.java:553)
    java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    java.lang.SecurityManager.checkRead(SecurityManager.java:888)
    java.io.File.exists(File.java:748)
    HelloWorldExample2.doGet(HelloWorldExample2.java:42)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:616)
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:269)
    java.security.AccessController.doPrivileged(Native Method)
    javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:301)
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)**

Ответы [ 4 ]

4 голосов
/ 02 декабря 2010

Я настоятельно рекомендую использовать каркас журналирования, такой как log4j , SLF4j или даже классы журналирования, которые поставляются с самой Java.Вы как бы заново изобретаете колесо здесь:)

1 голос
/ 02 декабря 2010

Используйте slf4j и Logback для ваших нужд регистрации.Вы не пожалеете об этом, поскольку не хотите изобретать велосипед + у вас будет очень настраиваемое решение.

1 голос
/ 02 декабря 2010

Поскольку могут быть развернуты несколько различных сервлетов, и каждый из них может пытаться перенаправить стандартный вывод, это просто не то, что tomcat может позволить вам сделать (не говоря уже о том, что он уже перенаправляет потоки для регистрации в catalina.out).

Так что либо просто отфильтруйте то, что вам нужно, из лог-файла Tomcat, либо назначьте эти потоки некоторым статическим переменным, к которым вы можете получить доступ из сервлета.Вам нужна некоторая синхронизация, хотя я думаю, что классы ввода / вывода могут быть потокобезопасными.Использование каркаса ведения журналов облегчит вам жизнь, в зависимости от масштаба проекта (что-нибудь большее, чем сервлет с двумя методами).

1 голос
/ 02 декабря 2010

Используйте Logging Framework , такой как Java Util Logging или Log4J .

...