2010-12-02 1 views
0

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

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)** 
+0

Похоже, что пользователь, с которого вы работаете на сервере, не имеет права на запись для/tmp dir – 2010-12-02 13:10:27

ответ

4

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

1

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

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^