`
韩悠悠
  • 浏览: 839756 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

12,tomcat日志处理

 
阅读更多

日志系统是一个记录信息的组件。在Catalina中,日志系统是一个相对简单的跟容器相关联的组件。
Tomcat在org.apache.catalina.logger包中提供了多个不同的日志系统
Logger接口
一个日志系统必须实现org.apache.catalina.Logger接口

 

public interface Logger {


    // ----------------------------------------------------- Manifest Constants


    /**
     * Verbosity level constants for log messages that may be filtered
     * by the underlying logger.
     */

    public static final int FATAL = Integer.MIN_VALUE;

    public static final int ERROR = 1;

    public static final int WARNING = 2;

    public static final int INFORMATION = 3;

    public static final int DEBUG = 4;


    // ------------------------------------------------------------- Properties


    /**
     * Return the Container with which this Logger has been associated.
     */
    public Container getContainer();


    /**
     * Set the Container with which this Logger has been associated.
     *
     * @param container The associated Container
     */
    public void setContainer(Container container);


    /**
     * Return descriptive information about this Logger implementation and
     * the corresponding version number, in the format
     * <code>&lt;description&gt;/&lt;version&gt;</code>.
     */
    public String getInfo();


    /**
     * Return the verbosity level of this logger.  Messages logged with a
     * higher verbosity than this level will be silently ignored.
     */
    public int getVerbosity();


    /**
     * Set the verbosity level of this logger.  Messages logged with a
     * higher verbosity than this level will be silently ignored.
     *
     * @param verbosity The new verbosity level
     */
    public void setVerbosity(int verbosity);


    // --------------------------------------------------------- Public Methods


    /**
     * Add a property change listener to this component.
     *
     * @param listener The listener to add
     */
    public void addPropertyChangeListener(PropertyChangeListener listener);


    /**
     * Writes the specified message to a servlet log file, usually an event
     * log.  The name and type of the servlet log is specific to the
     * servlet container.  This message will be logged unconditionally.
     *
     * @param message A <code>String</code> specifying the message to be
     *  written to the log file
     */
    public void log(String message);


    /**
     * Writes the specified exception, and message, to a servlet log file.
     * The implementation of this method should call
     * <code>log(msg, exception)</code> instead.  This method is deprecated
     * in the ServletContext interface, but not deprecated here to avoid
     * many useless compiler warnings.  This message will be logged
     * unconditionally.
     *
     * @param exception An <code>Exception</code> to be reported
     * @param msg The associated message string
     */
    public void log(Exception exception, String msg);


    /**
     * Writes an explanatory message and a stack trace for a given
     * <code>Throwable</code> exception to the servlet log file.  The name
     * and type of the servlet log file is specific to the servlet container,
     * usually an event log.  This message will be logged unconditionally.
     *
     * @param message A <code>String</code> that describes the error or
     *  exception
     * @param throwable The <code>Throwable</code> error or exception
     */
    public void log(String message, Throwable throwable);


    /**
     * Writes the specified message to the servlet log file, usually an event
     * log, if the logger is set to a verbosity level equal to or higher than
     * the specified value for this message.
     *
     * @param message A <code>String</code> specifying the message to be
     *  written to the log file
     * @param verbosity Verbosity level of this message
     */
    public void log(String message, int verbosity);


    /**
     * Writes the specified message and exception to the servlet log file,
     * usually an event log, if the logger is set to a verbosity level equal
     * to or higher than the specified value for this message.
     *
     * @param message A <code>String</code> that describes the error or
     *  exception
     * @param throwable The <code>Throwable</code> error or exception
     * @param verbosity Verbosity level of this message
     */
    public void log(String message, Throwable throwable, int verbosity);


    /**
     * Remove a property change listener from this component.
     *
     * @param listener The listener to remove
     */
    public void removePropertyChangeListener(PropertyChangeListener listener);


}

 日志接口提供了日志系统要实现的方法,最简单的方法是接受一个字符串并将其记录,
最后两个方法会接受一个冗余级别(verbosity level),如果传递的数字低于该类的实例设置的冗余级别,就将信息记录下来,否则就忽略信息。
静态变量定义了五个冗余级别:FATAL, ERROR, WARNING, INFORMATION,和 DEBUG。getVerbosity和setVerbosity分别用来获得和设置冗余级别。
日志接口还有getContainer 和 setContainer方法用来将日志系统跟容器关联起来

Tomcat日志系统
Tomcat提供了三种日志系统,它们分别是FileLogger, SystemErrLogger, 和 SystemOutLogger。
都继承了org.apache.catalina.logger.LoggerBase类

 



 

 

 

LoggerBase类
LoggerBase类是一个抽象类,它实现了Logger接口中除log(String msg)之外的所有方法。
 public abstract void log(String msg);
该方法需要在子类进行覆盖(overload),所有的其他的log方法都调用了该方法
SystemOutLogger类
SystemOutLogger作为LoggerBase的子类提供了log(String message)方法的实现
每一个收到的信息都被传递给System.out.println
public class SystemOutLogger extends LoggerBase {
 protected static final String info = "org.apache.catalina.logger.SystemOutLogger/1.0";
 public void log(String msg) {
  System.out.println(msg);
 }
}

SystemErrLogger类
public class SystemErrLogger extends LoggerBase {
 protected static final String info = "org.apache.catalina.logger.SystemErrLogger/1.0";
 public void log(String msg) {
  System.err.println(msg);
 }
}

FileLogger类
FileLogger是LoggerBase类中最复杂的
它将从关联容器收到的信息写到文件中,每个信息可以选择性的加上时间戳。
在第一次实例化的时候,该类的实例会创建一个文件,该文件的名字带有日期信息。
如果日期改变了,它会创建一个新的文件并把信息写在里面。

 

 

public void log(String msg) {

        // Construct the timestamp we will use, if requested
        Timestamp ts = new Timestamp(System.currentTimeMillis());
        String tsString = ts.toString().substring(0, 19);
        String tsDate = tsString.substring(0, 10);

        // If the date has changed, switch log files
        if (!date.equals(tsDate)) {
            synchronized (this) {
                if (!date.equals(tsDate)) {
                    close();
                    date = tsDate;
                    open();
                }
            }
        }

        // Log this message, timestamped if necessary
        if (writer != null) {
            if (timestamp) {
                writer.println(tsString + " " + msg);
            } else {
                writer.println(msg);
            }
        }

    }

 log方法接受一个消息并把消息写到日志文件中。
在FileLogger实例的生命周期中,log方法可以打开或关闭多个日志文件。
写日志的方法

private void open() {

        // Create the directory if necessary
        File dir = new File(directory);
        if (!dir.isAbsolute())
            dir = new File(System.getProperty("catalina.base"), directory);
        dir.mkdirs();

        // Open the current log file
        try {
            String pathname = dir.getAbsolutePath() + File.separator +
                prefix + date + suffix;
            writer = new PrintWriter(new FileWriter(pathname, true), true);
        } catch (IOException e) {
            writer = null;
        }

    }

 

open方法首先应该创建日志的目录是否存在,如果目录不存在,则首先创建目录
Close方法清空PrintWriter变量writer,然后关闭PrintWriter并将writer设置为null
 private void close() {

        if (writer == null)
            return;
        writer.flush();
        writer.close();
        writer = null;
        date = "";

    }

  • 大小: 70.4 KB
分享到:
评论

相关推荐

    tomcat日志详细说明

    ### Tomcat日志详细说明 #### 一、Tomcat日志概述 Apache Tomcat作为一款开源的Servlet容器,被广泛应用于Java Web应用的部署。它不仅支持Servlet还支持JSP等技术,是学习和开发Java Web项目的理想选择之一。为了...

    tomcat日志乱码处理方法总结

    ### tomcat日志乱码处理方法总结 在日常运维或者开发过程中,经常遇到Tomcat的日志出现乱码的情况。这不仅影响阅读体验,更有可能在排查问题时带来不便。本文将详细总结几种常见的Tomcat日志乱码处理方法,帮助大家...

    tomcat日志配置所有包

    - `.handlers`属性定义了日志处理程序的顺序。例如,`java.util.logging.ConsoleHandler`负责将日志输出到控制台,而`java.util.logging.FileHandler`则将日志写入文件。 5. **日志级别配置** - 通过调整日志级别...

    tomcat 下catalina.out 日志乱码问题处理

    标题中的“tomcat下catalina.out日志乱码问题处理”主要涉及的是在Tomcat服务器运行过程中,输出的日志文件`catalina.out`中,中文字符显示为乱码的状况。这通常是由于字符编码不匹配导致的,因为Tomcat在读取或写入...

    tomcat配置生成的日志文件按照日期新建工具

    Tomcat默认使用了Java的`java.util.logging`框架,也支持通过Log4j或者Logback等第三方日志框架进行日志处理。在Tomcat的`conf/logging.properties`或`conf/log4j.properties`(取决于所使用的日志框架)文件中,...

    tomcat日志切割和tomcat优化

    【标题】:Tomcat日志切割与Tomcat优化 【内容】: Tomcat作为流行的Java Servlet容器,其性能和日志管理是运维人员关注的重点。日志切割是保持日志文件大小合理、便于管理和分析的重要手段,而Tomcat优化则关乎...

    tomcat日志分割

    因此,很多开发者选择集成Log4j来增强Tomcat的日志处理能力。Log4j是一个开源的日志框架,提供了更为灵活和强大的日志配置选项,包括日志级别、输出目的地以及日志分割策略等。 ### 实现日志分割的步骤 要使Tomcat...

    Tomcat日志catalina.out过大解决方案--使用logback按日轮转.rar

    为了解决这个问题,我们可以引入`Logback`,一个强大的、灵活的日志框架,来替代默认的日志处理方式,实现日志的按日轮转。 `Logback`由著名的`Log4j`创始人Ceki Gülcü创建,它提供了更高效的日志处理机制,并且...

    tomcat 外网部署按天切分保存日志配置文件

    Tomcat,作为一款广泛应用的开源Java Servlet容器,其日志处理方式对于监控和维护至关重要。本文将详细讲解如何在外网部署Tomcat时,配置按天切分保存日志,以优化存储管理和提升故障排查效率。 首先,我们要了解...

    tomcat日志切割

    标题中的“Tomcat日志切割”是指在Apache Tomcat服务器中对日志文件进行定期管理和分割的过程。在大型系统中,日志文件可能会迅速增长,占用大量磁盘空间,因此需要有策略地处理这些日志,以便于分析、存储和清理。...

    iis日志和tomcat日志批量分析(python)demo

    在这个`process_log`函数中,我们可以调用前面定义的`read_iis_logs`或针对Tomcat日志的解析函数,然后进行相应的分析。 **总结** 通过Python进行日志批量分析,我们可以高效地收集、整理和解读大量日志数据,从而...

    cronolog1.6.2的tomcat日志分割

    这就是cronolog在Tomcat日志管理中的重要性所在。 **cronolog工作原理:** cronolog基于cron守护进程运行,可以按照预设的时间格式(如小时、天或周)对日志进行切割。当新的日志数据到达时,它会创建一个新的日志...

    tomcat7修改catalina.out日志按天生成jar文件

    通常,将这样的jar包放入Tomcat的`lib`目录是为了让Tomcat在启动时能够加载其中的类,从而实现自定义的日志处理逻辑。 接下来,“修改conf配置文件”是指我们需要编辑Tomcat的配置文件,通常是`logging.properties`...

    Tomcat日志分割20190927_日志分割_tomcat_

    Tomcat作为一个广泛使用的Java Servlet容器,其日志处理能力直接影响到系统的稳定性和运维效率。本篇将深入探讨"Tomcat日志分割"这一主题,以及如何配置Tomcat以实现日志自动分割,同时解决防止重复启动的问题。 ...

    Logstash收集Tomcat集群日志的解决方案.txt

    ### Logstash收集Tomcat集群日志的解决方案 #### 背景介绍 随着企业规模的不断扩大,业务系统逐渐复杂化,对于系统运维人员而言,如何有效地监控和管理大量的日志数据变得至关重要。尤其是在Web应用程序中,例如...

    tomcat日志.rar

    当我们谈论“Tomcat日志”时,我们通常关注的是Tomcat服务器生成的输出信息,包括启动、运行时状态、错误报告等。 "tomcat日志分割"是指在日志文件达到特定大小后自动创建新的日志文件,以避免单个日志文件过大导致...

    iis日志分析和tomcat日志分析(python语言)

    Tomcat日志包括标准输出、错误输出以及访问日志,提供了关于应用运行情况的详细信息。访问日志通常遵循自定义的格式,比如Common Log Format(CLF)或Combined Log Format,记录了每个HTTP请求的详细信息。通过分析...

    Tomcat日志控制脚本

    ### Tomcat日志控制脚本:精细化管理与自动轮换机制 在IT运维与系统管理领域,日志文件是至关重要的资源,它们记录了应用程序运行过程中的关键信息,包括错误、警告以及正常运行状态下的各种事件。对于Apache ...

    linux下切分tomcat的Catalina.out日志

    这不仅会导致磁盘空间不足的问题,还会影响Tomcat的性能和稳定性,使得应用程序无法正常处理请求。 #### 解决方案 解决这个问题的一种有效方法是通过定期切分`catalina.out`日志文件。这样做不仅可以避免单个日志...

    log4j tomcat日志jar包 tomcat-juli-adapters,log4j-1.2.15.jar,tomcat-juli.jar

    本篇文章将深入探讨`log4j`、`tomcat-juli`以及它们之间的适配器`tomcat-juli-adapters`,并阐述它们在Tomcat日志处理中的作用。 首先,`log4j-1.2.15.jar`是Log4j的版本1.2.15的JAR包。Log4j是一个功能强大的日志...

Global site tag (gtag.js) - Google Analytics