Tomcat 使用Log4j日志。

原创 2011年01月18日 12:03:00

 采用默认的tomcat日志,无法解决中文信息输出乱码的问题。tomcat5 中,可以使用log4j或者java logging配置文件对日志输出进行配置。以下是相关试验记录。

 

如果common/lib下没有common-logging.jar和log4j.jar

 

输出正常的日志。catalina.out记录控制台信息,否则,会产生tomcat.log,其内容和catalina.out格式不一样。

 

如果是bin/catalina.sh start,会记录catalina.out文件

 

如果是bin/catalina.sh run,则会把内容输出到控制台,不产生catalina.out,产生

 

catalina.2008-08-04.log这样的文件,但是里面的内容要比catalina.out少。

 

实验用的文件内容如下

 

log4j.properties

 

log4j.rootLogger=info,Console,R 

 

 

 

log4j.appender.Console=org.apache.log4j.ConsoleAppender

 

log4j.appender.Console.layout=org.apache.log4j.PatternLayout

 

#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

 

log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n 

 

#保证中文无乱码

 

log4j.appender.Console.Encoding=GBK 

 

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

 

log4j.appender.R.File=${catalina.home}/logs/tomcat.log 

 

log4j.appender.R.layout=org.apache.log4j.PatternLayout

 

log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):? %m%n 

 

log4j.appender.R.Encoding=GBK

 

 

 

#log4j.logger.org.apache=info, R

 

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R 

 

log4j.logger.org.apache.catalina.core=info, R

 

log4j.logger.org.apache.catalina.session=info, R

 

导致的结果是tomcat.log输出了两遍,即每一条都重复输出

 

后来发现,重复输出的元凶,实际上是这个配置文件本身有问题。红色字体这几句有重叠的成分,注释掉第一句,INFO不重复了。

 

还要注意一点:如果应用目录下有log4j.properties文件(具体目录,实验时就是在应用的根目录下,比如fbysssProject/log4j.properties),当删除tomcat/common/classes/log4j.properties之后,只要lib里面那两个包还在,tomcat会在应用目录里面找log4j.properites。这样,还会生成tomcat.log。

 

注意:虽然文档中有log4j.appender.R.File=${catalina.home}/logs/tomcat.log ,但实际上这个文件是固定的,改了没有用,始终会生成到tomcat.log里面。

 

还有就是tomcat.log尚不能替代catalina.out,因为其不能输出各应用的日志。

 

 

 

进一步的实验,事情变得越来越离谱:把tomcat/common/classes和应用根目录的log4j.properties都删除之后,tomcat.log还在更新!为何?

 

后来发现,在应用目录的上级目录里面还有一个log4j.properties,tomcat居然找到这里去了?真是匪夷所思,删除这个文件之后,tomcat.log终于消失了。而且,这里的配置文件,可以修改tomcat.log为其他文件名。

 

回头一想,是不是开始应用根目录的那个文件实际上没作用?实验表明,的确,也就是说上面的斜体字部分是误解。正确的是:两个包在,还要能够找到log4j.properties,才会生成指定的log文件(不一定是要tomcat.log)。

 

想把应用的类日志也输出到tomcat.log,尝试把应用里面。

 

增加

 

log4j.logger.org.apache.jsp=info, R

 

log4j.logger.org.hibernate=info,R

 

log4j.logger.com.fbysssProject=info,R

 

log4j.logger.org.apache.commons = ERROR,R

 

 

 

log4j.rootLogger=info, R

 

log4j.logger.org.dom4j=info

 

log4j.logger.JDBCExceptionReporter=info

 

没有成功

 

结论:tomcat日志只能记录tomcat本身的日志,要做到日志与控制台显示完全一样,几乎不可能,(当然,如果不要求看控制台,用catalina.sh start方式,可以查看catalina.out,这个和控制台内容一样。)折衷办法是在各自的应用中自己写日志配置,结合起来看。

 

java logging方式:

 

tomcat/conf/logging.properties:

 

 

 

# the License.  You may obtain a copy of the License at

 

#

 

#     http://www.apache.org/licenses/LICENSE-2.0

 

#

 

# Unless required by applicable law or agreed to in writing, software

 

# distributed under the License is distributed on an "AS IS" BASIS,

 

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 

# See the License for the specific language governing permissions and

 

# limitations under the License.

 

 

 

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

 

 

 

.handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler ,org.apache.juli.FileHandler

 

#这句可以保证输出中文没有乱码

 

java.util.logging.ConsoleHandler.encoding=GBK 

 

############################################################

 

# Handler specific properties.

 

# Describes specific configuration info for Handlers.

 

############################################################

 

 

 

org.apache.juli.FileHandler.level = FINE

 

org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

org.apache.juli.FileHandler.prefix = sout.

 

org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter

 

1catalina.org.apache.juli.FileHandler.level = FINE

 

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.

 

 

 

3manager.org.apache.juli.FileHandler.level = FINE

 

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

 

3manager.org.apache.juli.FileHandler.prefix = manager.

 

 

 

4admin.org.apache.juli.FileHandler.level = FINE

 

4admin.org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

4admin.org.apache.juli.FileHandler.prefix = admin.

 

 

 

 

 

写入文件sout.log,但是还是不全。

 

编辑conf/logging.properties

 

handlers节加入org.apache.juli.FileHandler

 

.handlers节加入org.apache.juli.FileHandler

 

 

 

任意位置写入:

 

org.apache.juli.FileHandler.level = FINE

 

#位置

 

org.apache.juli.FileHandler.directory = ${catalina.base}/logs

 

#日志前缀

 

org.apache.juli.FileHandler.prefix = sout.

 

org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter

 

 

 

 

 

“ 一闪而过”错误

 

在windows下,有时候tomcat出错,一闪而过,还看不到信息,解决办法是使用catalina.bat run,可以看到出错信息。

 

 

 

 

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/4_webprogram/jsp/jsp_js/2008827/137728.html

Tomcat使用Log4j输出catalina.out日志

Tomcat默认的日志是用java.util.logging,有几点不足,文件catalian.out不能像log4j一样按天生成,将越来越大。日志格式和项目中用log4j打出来的不一致,不利于解析。...

Tomcat日志配置,可结合log4j

1    Tomcat 日志概述 Tomcat 日志信息分 为 两 类 : 一是运行中的日志,它主要 记录 运行的一些信息,尤其是一些异常 错误 日志信息 。 二是 访问 日志信息,它 ...
  • lrcoop
  • lrcoop
  • 2016年08月16日 09:54
  • 1890

Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式:

我们知道,tomcat默认使用java.util.logging进行日志打印,并且LINUX默认都将应用日志打印在catalina.out。当系统长期运行,我们就会发现问题:catalina.out日...

使用log4j为Tomcat输出日志

使用log4j为Tomcat输出日志 http://tomcat.apache.org/tomcat-6.0-doc/logging.html#Using_Log4j 原出...

log4j日志文件乱码问题的解决方法

 近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题。 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows、Linux、Unix上,用log4j打印日志,出现乱码,常见的...
  • inkfish
  • inkfish
  • 2009年11月03日 11:58
  • 64975

log4j.xml配置详解 properties 的太费眼了

Xml代码                                                                            ...

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

一直想研究一下tomcat的日志管理

tomcat8使用log4j分割日志的流程

1.下载log4j-1.2.17.jar(http://www.apache.org/dist/logging/log4j/1.2.17/) 2.下载 tomcat-juli.jar(http://...

使用log4j切分tomcat的catalina.out输出文件

最近要做一个负载均衡服务器,后端使用tomcat作为应用服务器,主要需要解决tomcat输出日志过大的问题,想来想去,利用log4j来切分日志。主要工作有以下: 使用log4j切分日志,需要下载相应...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat 使用Log4j日志。
举报原因:
原因补充:

(最多只允许输入30个字)