未调用运行时异常处理程序

时间:2015-12-07 05:50:51

标签: java tomcat

我的代码是这样的:

    @WebListener
public class MyListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent arg0) {
}

@Override
public void contextInitialized(ServletContextEvent arg0) {
    new Thread(new Runnable() {

        @Override
        public void run() {
            throw new RuntimeException("sdfsfds");                  
        }
    }).start();
}   

}

这是我对 tomcat 8.0.5 的最低部署,在控制台中不会打印任何内容。任何人都可以提供一些线索吗?

由于

3 个答案:

答案 0 :(得分:1)

服务器中没有控制台,所以你没有得到任何东西

但是您将获得位于logs文件夹中的catalina.out文件中的语句。

注意:如果您的服务器是linux机器,那么<​​em> sysout 语句将打印在catalina.out文件中

如果您的服务器位于Windows机器中,那么您将无法在catalina.out文件中获得 sysout 语句。

您必须手动将控制台语句重定向到catalina.out文件。请按照以下步骤

  1. 创建一个文件并将其命名为catalinaRedirectLog.bat
  2. 在记事本中打开它,然后输入catalina run > ..\logs\catalina.out 2<&1
  3. 保存此文件
  4. 运行shutdown.bat
  5. 运行catalinaRedirectLog.bat启动tomcat,不要运行startup.bat 从现在开始
  6. 我强烈建议您使用log4或任何其他日志记录框架并避免使用sysout语句

答案 1 :(得分:1)

使用Tomcat的启动脚本(System.out)时,

System.errCATALINA_BASE/logs/catalina.out都被重定向到bin/startup.sh/.bat or bin/catalina.sh/.bat。写入System.outSystem.err的任何代码都将最终写入该文件。

默认情况下,Apache Tomcat服务器没有控制台。但是,您可以使用Apache log4j这是一个基于Java的日志记录实用程序。

登录Apache Tomcat是在Apache Commons Logging库的帮助下实现的。该库是不同日志框架之上的瘦包装器。它为Tomcat提供了跨各种日志级别进行层次结构日志记录的功能,而无需依赖特定的日志记录实现。

您可以使用logging log4j

中提供的说明为Tomcat配置Log4j

编辑 :(来自您的一条评论)有关在Eclipse控制台中配置日志的信息,请参阅此thread

答案 2 :(得分:0)

您如何向ExecutorService es提交任务?通过execute()submit()

如果您通过submit()提交任务,则会被吞下,但无法与您联系。

看看这个Code

 if (getState() == RUNNING) { // recheck after setting thread
            V result;
            try {
                result = callable.call();
            } catch (Throwable ex) {
                setException(ex);
                return;
            }
            set(result);
        } else {
            releaseShared(0); // cancel
        }

了解如何处理Future任务exceptions。你必须覆盖

protected void  afterExecute(Runnable r, Throwable t)
//Method invoked upon completion of execution of the given Runnable.

ThreadPoolExecutor

的一部分