Tomcat中catalina.out 和 catalina.log的区别和用途详解

 更新时间:2022年02月17日 09:36:49   作者:daopinz  
本文主要介绍了Tomcat中catalina.out 和 catalina.log的区别和用途详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

catalina.out

catalina.out其实是tomcat的标准输出(stdout)和标准出错(stderr),这是在tomcat的启动脚本里指定的,如果没有修改的话stdout和stderr会重定向到这里。所以我们在应用里使用System.out打印的东西都会到这里来。另外,如果我们在应用里使用其他的日志框架,配置了向Console输出的,则也会在这里出现。比如以logback为例,如果配置ch.qos.logback.core.ConsoleAppender则会输出到catalina.out里。

cataliana.{yyyy-MM-dd}.log和localhost.{yyyy-MM-dd}.log

这两个日志都是通过logging.properties配置的(默认情况下,启动脚本里指定了java.util.logging.config.file和java.util.logging.manager两个变量)。一个典型的logging.properties可能如下所示:

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
 
1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
 
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
 
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

这个文件大致的意思是,root输出到catalina和console。而这里的catalina按照配置对应的是catalina.{yyyy-MM-dd}.log,这里的console最终会输出到catalina.out。这就是我们看到catalina.{yyyy-MM-dd}.log和catalina.out的日志很多都是一样的原因。

配置文件中还有一个localhost,所有logname或parent logname为org.apache.catalina.core.ContainerBase.[Catalina].[localhost]的都会输出到localhost.{yyyy-MM-dd}.log文件。而这个logname又代表着什么呢?在tomcat中有一个server.xml的配置文件,其中有这么一个片段:

<Engine name="Catalina" defaultHost="localhost">
  <Host name="localhost"  appBase="webapps"
        unpackWARs="false" autoDeploy="false">
  </Host>
</Engine>

我们可以这么简单的理解: 一个Tomcat进程对应着一个Engine,一个Engine下可以有多个Host(Virtual Host),一个Host里可以有多个Context,比如我们常常将应用部署在ROOT下还是webapps里其他目录,这个就是Context。

这其中Engine对应着tomcat里的StandardEngine类,Host对应着StandardHost类,而Context对应着StandardContext。这几个类都是从ContainerBase派生。这些类里打的一些跟应用代码相关的日志都是使用ContainerBase里的getLogger,而这个这个logger的logger name就是: org.apache.catalina.core.ContainerBase.[current container name].[current container name]...

而我们一个webapp里listener, filter, servlet的初始化就是在StandardContext里进行的,比如ROOT里有一个listener初始化出异常了,打印日志则logger name是org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/]。这其中Catalina和localhost是上面xml片段里的Engine和Host的name,而[/]是ROOT对应的StandardContext的name。所以listener, filter, servlet初始化时的日志是需要看localhost.{yyyy-MM-dd}.log这个日志的。比如现在我们使用Spring,Spring的初始化我们往往是使用Spring提供的一个listener进行的,而如果Spring初始化时因为某个bean初始化失败,导致整个应用没有启动,这个时候的异常日志是输出到localhost中的,而不是cataina.out中。所以有的时候我们应用无法启动了,然后找catalina.out日志,但最后也没有定位根本原因是什么,就是因为我们找的日志不对。但有的时候catalina.out里也有我们想要的日志,那是因为我们的应用或使用的一些组件自己捕获了异常,然后将其打印了,这个时候如果恰好这些日志被我们配置成输出到console,则这些日志也会在catalina.out里出现了。

总结

那么总结起来,catalina.out即标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。catalina.{yyyy-MM-dd}.log是tomcat自己运行的一些日志,这些日志还会输出到catalina.out,但是应用向console输出的日志不会输出到catalina.{yyyy-MM-dd}.log。localhost.{yyyy-MM-dd}.log主要是应用初始化(listener, filter, servlet)未处理的异常最后被tomcat捕获而输出的日志,而这些未处理异常最终会导致应用无法启动。

最后想想,这里分几个日志文件其实不利于问题查找,为啥不干脆都输出到catalina.out里呢?我想tomcat作为通用容器本身,可能考虑到Engine下有多个Host,每个Host的日志还是要输出到不同的文件。而实际中我们往往是单容器,单Host,甚至是只有一个ROOT的Context。

一般是用log4j按照业务划分,对一些比较重要的业务会单独打到一个文件,方便容易定位问题,,其他的默认会打到catalina。

到此这篇关于Tomcat中catalina.out 和 catalina.log的区别和用途详解的文章就介绍到这了,更多相关Tomcat catalina.out  catalina.log内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何解决tomcat管理页面403 Access Denied问题

    如何解决tomcat管理页面403 Access Denied问题

    这篇文章主要介绍了如何解决tomcat管理页面403 Access Denied问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 基于IDEA部署Tomcat服务器的步骤详解

    基于IDEA部署Tomcat服务器的步骤详解

    这篇文章主要介绍了基于IDEA部署Tomcat服务器,并在上面创建第一个servlet程序,实现前后端交互,然后做一个简单的四则运算计算器,需要的朋友可以参考下
    2021-04-04
  • 解决Tomcat在IDEA控制台乱码问题的详细教程

    解决Tomcat在IDEA控制台乱码问题的详细教程

    本文详细描述了解决Tomcat和IDEA中编码问题的两种方案,包括设置JAVA_TOOL_OPTIONS,VMoptions,编辑器编码,以及IDEA配置文件中的UTF-8编码设置,确保重启后问题得到解决,需要的朋友可以参考下
    2024-09-09
  • 新版Eclipse集成Tomcat时找不到server选项的解决方法

    新版Eclipse集成Tomcat时找不到server选项的解决方法

    这篇文章主要给大家分享了新版Eclipse集成Tomcat时找不到server选项的解决方案,文章通过图文介绍讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • eclipse配置Tomcat和Tomcat出现无效端口解决办法

    eclipse配置Tomcat和Tomcat出现无效端口解决办法

    本文主要介绍了eclipse配置Tomcat和Tomcat出现无效端口解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Tomcat8使用cronolog来进行Catalina.Out日志分割方法

    Tomcat8使用cronolog来进行Catalina.Out日志分割方法

    今天通过本文给大家分享如何使用cronolog来分割catalina.out日志文件,对Tomcat Catalina.Out日志分割方法感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • Tomcat源码导入idea的方法

    Tomcat源码导入idea的方法

    这篇文章主要介绍了Tomcat源码导入idea的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • tomcat的配置使用详细版(小结)

    tomcat的配置使用详细版(小结)

    开发者开发部署web应用时通常使用tomcat服务器,这篇文章主要介绍了tomcat的配置使用详细版(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • IntelliJ IDE运行Tomcat报错解决办法

    IntelliJ IDE运行Tomcat报错解决办法

    这篇文章主要介绍了 IntelliJ IDE运行Tomcat报错解决办法的相关资料,出现“Unable to ping server at localhost:1099”错误解决方法,需要的朋友可以参考下
    2017-08-08
  • IDEA 配置Tomcat服务器和发布web项目的图文教程

    IDEA 配置Tomcat服务器和发布web项目的图文教程

    这篇文章主要介绍了IDEA 配置Tomcat服务器和发布web项目的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论