tomcat7日志管理--基础知识、配置、以及使用log4j做日志分割

来源:互联网 发布:工程进度计划软件 编辑:程序博客网 时间:2024/06/03 14:34

一直想研究下tomcat的日志管理,今天终于抽出时间,通过上网查资料和亲自动手实践,终于把这一部分搞明白了。本人用的tomcat版本是7.0.55,下面写的内容也是基于此版本的配置,7以下的可能有些不同,这里就不做说明了。如有不正确的部分,欢迎大家指正。

注:关于tomcat7日志管理的部分内容来自于Apache tomcat 7.0文档中logging部分,想看源文档的可以移步:http://tomcat.apache.org/tomcat-7.0-doc/logging.html

—————————————————————————我是正文分割线—————————————————————————

下面是tomcat日志基本知识科普时间,已经了解的请跳过:

tomcat上日志的实现基于Apache Commons Logging库,因此需要引入commons-logging包(我使用的是commons-logging-1.2.jar)

在tomcat上运行web项目记录日志有三种方式:

  • 使用系统jdk自带的logging API: java.util.logging;
  • 使用java servlet规范提供的logging API: javax.servlet.ServletContext.log(..)
  • 选择使用其他的日志框架,如log4j

不同项目中使用的同一日志框架之间是相互独立的,但如果项目直接或间接地使用了java.util.logging来记录日志的话除外,因为它由系统统一加载并在不同的项目之间共享。

1.使用java.util.logging

java.util.logging API的默认实现功能有限,因此tomcat的默认配置中,将日志管理(LogManager)的实现替换为了另一个实现容器JULI,它同样支持标准JDK java.util.logging的配置机制,不同的是JULI的每一个类加载属性文件都可以被设置,并可以在其中定义处理器,这样就给了开发者更大的自由度。

JULI的日志配置分为全局配置和项目配置。全局配置位于tomcat的配置目录${catalina.base}/conf/logging.properties文件,如果该文件未配置或不可读,那么tomcat将会使用JRE中的默认日志配置,可以在${java.home}/lib/logging.properties查看配置文件的内容;项目配置则是针对不同的项目,配置文件位于WEB-INFO/classes/logging.properties.

下面代码是JRE中的日志配置文件的部分内容,可以看出其中的日志处理器为ConsoleHandler. 能够接受System.err错误日志

handlers= java.util.logging.ConsoleHandler# To also add the FileHandler, use the following line instead.#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler# Default global logging level.# This specifies which kinds of events are logged across# all loggers.  For any given facility this global level# can be overriden by a facility specific level# Note that the ConsoleHandler also has a separate level# setting to limit messages printed to the console..level= INFO############################################################# Handler specific properties.# Describes specific configuration info for Handlers.############################################################# default file output is in user's home directory.java.util.logging.FileHandler.pattern = %h/java%u.logjava.util.logging.FileHandler.limit = 50000java.util.logging.FileHandler.count = 1java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter# Limit the message that are printed on the console to INFO and above.java.util.logging.ConsoleHandler.level = INFOjava.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

下面代码则是tomcat配置文件中的日志配置部分,可以看出增加了FIleHandler,可以将日志写入文件,同时可以为不同的logger配置各自的级别和handler

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.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler############################################################# Handler specific properties.# Describes specific configuration info for Handlers.############################################################1catalina.org.apache.juli.FileHandler.level = FINE1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs1catalina.org.apache.juli.FileHandler.prefix = catalina.2localhost.org.apache.juli.FileHandler.level = FINE2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs2localhost.org.apache.juli.FileHandler.prefix = localhost.3manager.org.apache.juli.FileHandler.level = FINE3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs3manager.org.apache.juli.FileHandler.prefix = manager.4host-manager.org.apache.juli.FileHandler.level = FINE4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs4host-manager.org.apache.juli.FileHandler.prefix = host-manager.java.util.logging.ConsoleHandler.level = FINEjava.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter############################################################# Facility specific properties.# Provides extra control for each logger.############################################################org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandlerorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.FileHandlerorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFOorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.FileHandler

其中org.apache.juli.FileHandler是java提供的一个可以将多个实现类统一使用的入口,handler名字前可以增加前缀,前缀以String开始以字符‘.’结束,使用“.handler”可以定义root logger的handler集合

2.使用Log4j来记录日志

Log4j是一个应用比较广泛的日志框架,易于集成和使用。下面介绍如何使用Apache Log4j重新配置tomcat以取代java.util.logging来进行项目日志管理。

如果你只是想对当前的项目运用log4j,那么只需要将log4j.jar,log4j.properties分别放入项目的WEB-INFO/lib和WEB-INFO/classes文件夹下即可;但如果你想将log4j运用到所有运行于tomcat的项目中,那么还需要以下配置步骤:

1) 首先创建一个log4j.properties文件,并将其放置在tomcat的lib目录$CATALINA_BASE/lib下。以下配置内容摘自tomcat官方文档日志配置一节:

log4j.rootLogger = INFO, CATALINA# Define all the appenderslog4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.CATALINA.File = ${catalina.base}/logs/catalinalog4j.appender.CATALINA.Append = truelog4j.appender.CATALINA.Encoding = UTF-8# Roll-over the log once per daylog4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayoutlog4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhostlog4j.appender.LOCALHOST.Append = truelog4j.appender.LOCALHOST.Encoding = UTF-8log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayoutlog4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.MANAGER.File = ${catalina.base}/logs/managerlog4j.appender.MANAGER.Append = truelog4j.appender.MANAGER.Encoding = UTF-8log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayoutlog4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-managerlog4j.appender.HOST-MANAGER.Append = truelog4j.appender.HOST-MANAGER.Encoding = UTF-8log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayoutlog4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%nlog4j.appender.CONSOLE = org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Encoding = UTF-8log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n# Configure which loggers log to which appenderslog4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOSTlog4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =\  INFO, MANAGERlog4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =\  INFO, HOST-MANAGER

 2) 下载log4j的jar包,需要1.2以上版本

 3) 下载tomcat-juli.jar、tomcat-juli-adapters.jar作为tomcat的外部组件。注意,此处的tomcat-juli.jar和默认的不同,它包含了Apache Commons Logging的全部实现

 4) 如果你想使用log4j作为tomcat的全局配置,那么首先将log4j.jar、tomcat-juli-adapters.jar放入$CATALINA_HOME/lib目录下,然后将$CATALINA_HOME/bin/tomcat-juli.jar替换为下载的tomcat-juli.jar

 5) 如果你使用不同的$CATALINA_HOME和$CATALINA_BASE来运行tomcat,并且希望采用同一个$CATALINA_BASE来配置log4j,那么还需要下面几步操作:

    创建$CATALINA_BASE/bin和$CATALINA_BASE/lib目录;

    将log4j.jar和tomcat-juli-adapters.jar放入$CATALINA_BASE/lib下;

    将tomcat-juli.jar放入$CATALINA_BASE/bin下;

    如果你是以security manager运行的tomcat,那么还需要编辑$CATALINA_BASE/conf/catalina.policy文件来让它使用不同的tomcat-juli.jar.

 6) 删除$CATALINA_BASE/conf/logging.properties文件

 7) 重启tomcat

通过上面的步骤,使用log4j替代tomcat默认的java.util.logging来输出日志就配置完成了。

0 0
原创粉丝点击