我在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)**
答案 0 :(得分:4)
答案 1 :(得分:1)
使用Logging Framework,例如Java Util Logging或Log4J。
答案 2 :(得分:1)
由于可能会部署几个不同的servlet并且每个都可能尝试重定向stdout,这不是tomcat可以允许你做的事情(更不用说它已经将流重定向到日志记录,catalina.out)。 / p>
所以要么只是从tomcat日志文件中过滤掉你需要的东西,要么将这些流分配给你可以从servlet访问的一些静态变量。您需要一些同步,但我认为I / O类可能是线程安全的。使用日志框架可以让您的生活更轻松,具体取决于项目的大小(比使用2种方法的servlet更大)。
答案 3 :(得分:1)