You can use an XML config file just fine under Tomcat (with caveats... see
below).
I see two issues with your current XML config, though
1. The doctype should be...
!DOCTYPE log4j:configuration SYSTEM log4j.dtd
2. The path in...
param name=File value=c:\myproj\myapp\logs\mylog.log /
...should be either...
param name=File value=c:\\myproj\\myapp\\logs\\mylog.log /
...or...
param name=File value=c:/myproj/myapp/logs/mylog.log /
I mentioned a caveat above about using XML config files in Tomcat. By that, I
mean using it specifically for Tomcat logging, not just general application
logging. You can, unless you choose to reference Tomcat loggers named using
square brackets, as they are disallowed by the DTD. For instance, to reference
Tomcat's localhost logger, you'd use...
org.apache.catalina.core.ContainerBase.[Catalina].[localhost]
Using XML, it would be...
logger name=org.apache.catalina.core.ContainerBase.[Catalina].[localhost]
additivity=false
level value=INFO/
appender-ref ref=LOCALHOST/
/logger
But the name doesn't attribute doesn't allow square brackets and the config
file
fails DTD validation because the name attribute is defined as type ID. That
said, I think there might be a workaround. If you use the deprecated category
rather than logger it might work because, for the former, the name attribute
is of type CDATA rather than ID. So, all you'd have to do is use...
category
name=org.apache.catalina.core.ContainerBase.[Catalina].[localhost]
additivity=false
level value=INFO/
appender-ref ref=LOCALHOST/
/category
Try that and see if it works.
Jake
On 3/30/2011 11:15 AM, Cindy Wong wrote:
To answer my own question, according to Tomcat document, the problem is
with TC. I need to use the property configuration file format instead.
I have used log4j before with the property file configuration. For this
new project, I have the XML configuration. The console output seems to be
fine. Any changes on log level and layout will reflect on log messages on
the console right away.
I, however, can't get any log file for some reasons. To my understanding,
to use a log file, I need to use the
log4j-user-subscr...@logging.apache.org class and what is the name is
important.
The followings are the xml configuration and the dtd. Can someone tell me
what is wrong?
?xml version=1.0 encoding=UTF-8?
!-- !DOCTYPE log4j:configuration PUBLIC -//LOGGER log4j.dtd --
!DOCTYPE log4j:configuration PUBLIC -//log4j/log4j Configuration//EN
log4j.dtd
log4j:configuration xmlns:log4j=http://jakarta.apache.org/log4j/;
!-- log4j:configuration debug=true --
!-- Appenders --
appender name=console class=org.apache.log4j.ConsoleAppender
param name=Target value=System.out /
layout class=org.apache.log4j.PatternLayout
param name=ConversionPattern value=%-5p: %c{1}:%L -
%m%n /
/layout
/appender
appender name=file class=org.apache.log4j.RollingFileAppender
param name=maxFileSize value=100KB /
param name=maxBackupIndex value=5 /
param name=File value=c:\myproj\myapp\logs\mylog.log /
param name=Append value=true /
layout class=org.apache.log4j.PatternLayout
param name=ConversionPattern value=%d %-5p [%t]
%C{2} (%F:%L)
- %m%n/
/layout
/appender
!-- Application Loggers --
logger name=com.mycom.myapp
level value=debug /
/logger
!-- 3rdparty Loggers --
...
!-- Root Logger --
root
priority value=warn /
appender-ref ref=console /
/root
/log4j:configuration
?xml version=1.0 encoding=UTF-8 ?
!-- A configuration element consists of optional renderer
elements,appender elements, categories and an optional root
element. --
!ELEMENT log4j:configuration (renderer*,
appender*,(category|logger)*,root?,
categoryFactory?)
!-- The threshold attribute takes a level value such that all --
!-- logging statements with a level equal or below this value are --
!-- disabled. --
!-- Setting the debug enable the printing of internal log4j logging
--
!-- statements.
--
!-- By default, debug attribute is null, meaning that we not do touch
--
!-- internal log4j logging settings. The null value for the threshold
--
!-- attribute can be misleading. The threshold field of a repository
--
!-- cannot be set to null. The null value for the threshold attribute
--
!-- simply means don't touch the threshold field, the threshold field
--
!-- keeps its old value.
--
!ATTLIST log4j:configuration
xmlns:log4j CDATA #FIXED http://jakarta.apache.org/log4j/;
threshold(all|debug|info|warn|error|fatal|off|null)
null
debug