关闭

Tomcat 使用Log4j日志。

标签: tomcatlog4jpermissionsloggingexpressjava
1991人阅读 评论(0) 收藏 举报

 采用默认的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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49422次
    • 积分:669
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:34篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论
    Android 比较全面的介绍
    Java 分类比较全的的网友blog