如何在tomcat servlet应用程序中打印日志

时间:2010-12-02 13:05:12

标签: java servlets tomcat6

我在ubuntu 10.04中在Tomcat 6.0上创建servlet。对于打印日志,我使用System.setOut重定向输出。

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

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

我必须在doPost()中使用此代码,但在运行我的应用程序时,我无法看到输出,这就是为什么我暂时将此代码移到了doGet()中。

当我通过浏览器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 个答案:

答案 0 :(得分:4)

我强烈建议使用日志框架,例如log4jSLF4j,甚至是Java本身附带的Logging类。你有点在这里重新发明轮子:)

答案 1 :(得分:1)

使用Logging Framework,例如Java Util Logging或Log4J

答案 2 :(得分:1)

由于可能会部署几个不同的servlet并且每个都可能尝试重定向stdout,这不是tomcat可以允许你做的事情(更不用说它已经将流重定向到日志记录,catalina.out)。 / p>

所以要么只是从tomcat日志文件中过滤掉你需要的东西,要么将这些流分配给你可以从servlet访问的一些静态变量。您需要一些同步,但我认为I / O类可能是线程安全的。使用日志框架可以让您的生活更轻松,具体取决于项目的大小(比使用2种方法的servlet更大)。

答案 3 :(得分:1)

使用slf4jLogback来满足您的日志记录需求。你不会后悔,因为你不想重新发明轮子+你将有一个非常可定制的解决方案。