tomcat里的几类日志: Catalina(catalina.out,catalina.log) localhost manager admin host-manager

tomcat里的几类日志: Catalina localhost manager host-manager access

前言:有时候我们会碰到代码本地测试没问题,然鹅发到生产却出现了问题。这时候想解决问题,在本地测试没多大效果的,最好的办法是去生产上把日志搂出来,根据异常日志来排查问题,但是生产上那么多日志该如何下手呢?

项目中常用的三种日志catalina.out catalina.log localhost.log

一般我们应该从catalina.out,catalina.log和localhost.log三类日志着手。catalina.log和localhost.log是滚动生成的,后面接的有日期,格式可以是可以配的。配置在tomcat\conf下的logging.properties里面。

catalina.out

catalina.out 是tomcat的标准输出(stdout)和标准出错(stderr),这是在tomcat的启动脚本里指定的,如果没有修改的话stdout和stderr会重定向到这里。所以我们在应用程序中使用System.out/err打印的东西都会到这里来。另外,我们所有输出到控制台的日志也会记录进来。比如我们常用的log4j,当我们配置log4j.appender.stdout=org.apache.log4j.ConsoleAppender时,所有输出到控制台的log4j日志也会记录到Catalina.out中。所以一般情况下ConsoleAppender的日志级别需要配高一点,不然Catalina.out会显得特别臃肿,查找信息时也不太方便。比如测试的时候我一般用DEBUG级别,发生产用ERROR级别。当然你也可以关掉它,只需设置:

java.util.logging.ConsoleHandler.level = OFF 

或者修改Tomcat\bin目录下的catalina.sh

    if [ -z "$CATALINA_OUT" ] ; then
      CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
    修改为
    if [ -z "$CATALINA_OUT" ] ; then
      CATALINA_OUT=/dev/null
    这样就不会生成catalina.out文件了

catalina.log和localhost.log

在Tomcat的conf目录下可以找到logging.properties文件,里面配置了catalina.log和localhost.log相关的信息.默认情况下,启动脚本里指定了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 = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.logs}
1catalina.org.apache.juli.FileHandler.prefix = catalina.log.
1catalina.org.apache.juli.FileHandler.suffix =
1catalina.org.apache.juli.FileHandler.formatter = com.taobao.tomcat.juli.SimpleFormatter

2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.logs}
2localhost.org.apache.juli.FileHandler.prefix = localhost.log.
2localhost.org.apache.juli.FileHandler.suffix =
2localhost.org.apache.juli.FileHandler.formatter = com.taobao.tomcat.juli.SimpleFormatter

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = com.taobao.tomcat.juli.SimpleFormatter

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler

这个文件中directory表示日志生成地址,prefix是日志名前缀,suffix是日志名后缀,formatter是日志的格式化输出,level表示日志级别。而这里的catalina按照配置对应的是catalina.log.{yyyy-MM-dd},这里的console最终会输出到catalina.out。这就是我们看到catalina.log.{yyyy-MM-dd}和catalina.out的日志很多都是一样的原因。

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

<Engine name="Catalina" defaultHost="localhost">
    <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
        resourceName="UserDatabase"/>
    </Realm>
    <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里出现了。

manager.log和 host-manager.log

这几种日志用的比较少,如果需要的化可以这样配置:

handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler,
3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler

3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.

4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandler

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler

localhost_access_log

该日志可在Tomcat\conf的server.xml里Host标签里面配置

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; [%{postdata}r] %s %{Referer}i %{User-Agent}i %T %b" />

可以利用这个日志查询访问最耗时的接口

总结

catalina.out即标准输出和标准出错,这里包含tomcat运行自己输出的日志以及程序向控制台输出的日志,一般程序错误我们都能在这里面找到。

catalina.log是tomcat自己运行的一些日志,这些日志还会输出到catalina.out,但是应用向控制台输出的日志不会输出到catalina.log里。

localhost.log主要是应用初始化(listener, filter, servlet)未处理的异常最后被tomcat捕获而输出的日志,而这些未处理异常最终会导致应用无法启动。

一般情况下Catalina.out文件是比较大的,可能几百兆甚至几十G,对于查找问题特别不方便,所以我们可以将ConsoleAppender的日志级别直接配成ERROR级,或者单独配个appender来记录ERROR日志,以便有问题时我们可以迅速查找对应日志。

原文地址:https://www.cnblogs.com/luozw/p/9329379.html

时间: 2024-07-29 21:21:11

tomcat里的几类日志: Catalina(catalina.out,catalina.log) localhost manager admin host-manager的相关文章

解决Linux下Tomcat日志目录下的catalina.log日志文件过大的问题

本文摘自:(http://blog.csdn.net/stevencn76/article/details/6246162) 分类: Java技术专区2011-03-13 12:25 5017人阅读 评论(1) 收藏 举报 tomcatlinux工具任务web 由于Tomcat在默认情况下会将没有经过配置的web应用所产生的日志输出已经其本身的日志内容都输出到这个文件中,那么随着时间的推移,这个文件的尺寸将会越来越大,当需要检查日志内容时间会导致文件难以打开,而且同时tomcat依旧在不断的向文

tomcat配置的环境变量catalina.home和catalina.base 区别

本篇文章原创地址为:http://blog.csdn.net/you23hai45/article/details/27726147 这两个属性仅在你需要安装多个Tomcat实例而不想安装多个软件备份的时候使用,这样能节省磁盘空间. 以Tomcat6.0为例,其Tomcat目 录结构如下: bin (运行脚本) conf (配置文件) lib (核心库文件) logs (日志目录) temp (临时目录) webapps (自动装载的应用程序的目录) work (JVM临时文件目录[java.i

tomcat运行报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost].

tomcat运行报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost].多半情况是找不到jar包 解决办法: 右键项目-> 属性->添加lib 原文地址:https://www.cnblogs.com/firstdream/p/8401626.html

Tomcat发布程序时遇到Cannot create org.apache.catalina.User: org.apache.catalina.User Query: select * from user where name = ? and pwd = ? Parameters: [*,*]

问题如题所示,报错截图 此段代码已经经过测试是不存在问题的,但是当写到servlet中发布的时候就遇上了这个问题,问题字面意思是不能创建domain中的实体类User. 我一开始发现user类导入的不是自己写的domain,而是误把apache里的user类导入了,修改之后发现还是出现这个报错: 但是在仔细观察报错文字和代码之后,觉得说的就是类导错了,于是重启eclipse,问题解决?????WTF??????? 原文地址:https://www.cnblogs.com/CptMac/p/123

how tomcat works读书笔记 七 日志记录器

大家能够松一口气了,这个组件比較简单,这一节和前面几节想比,也简单的多. Logger接口 Tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口. package org.apache.catalina; import java.beans.PropertyChangeListener; public interface Logger { public static final int FATAL = Integer.MIN_VALUE; public s

tomcat日志配置之一自带log

问题 tomcat每次启动时,自动在logs目录下生产以下日志文件,且每天都会生成对应日期的一个文件,造成日志文件众多: localhost.2012-07-05.txt catalina.2012-07-05.txt manager.2012-07-05.txt host-manager.2012-07-05.txt 目的 Tomcat以上日志都输出到同一个文件中. 修改步骤 打开Tomcat目录conf\logging.properties,修改如下,所有日志输出到tomcat开头的文件中

Tomcat 学习进阶历程之Tomcat架构与核心类分析

前面的http及socket两部分内容,主要是为了后面看Tomcat源码而学习的一些网络基础.从这章开始,就开始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源码之前,准备先看一下Tomcat的架构与一些核心类的简单分析,并简单介绍一下Tomcat是如何处理一次Http请求的.这部分内容有相当一部分来源于网络,在此,感谢原作者的贡献. Tomcat的总体架构 Tomcat的架构关系可以从Tomcat的配置文件server.xml中看到端倪. 从上图中可以看出Tomcat 的心脏

tomcat访问(access)日志配置、记录Post请求参数(转)

一.配置与说明 tomcat访问日志格式配置,在config/server.xml里Host标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log." suffix=".txt"               pattern=&

[tomcat7源码学习]初始化之catalina.home和catalina.base(转)

我们在代码中为了获取某个配置文件路径下的文件经常会这么写 String tomcatPath = System.getProperty("catalina.home") + "/webapps/axis2/WEB-INF/conf/"; tomcatPath = tomcatPath.replace("/", File.separator); //使用此方法是为了区分unix系统与windows, //File.separator UNIX中为/