2

我对 Log4j 有一个特殊的问题。我们正在使用log4j.xml. 这很好用。我们想出了一种方法来运行 Tomcat 6,这样我们就可以在这个平台上开发并在 Weblogic 10 上部署。

我已经想出了如何log4j.properies使用 Tomcat 6 与使用 Tomcat 6 中的 JULI 日志记录机制的其他 JAs 一起使用。不幸的是,我的log4j.xml(与 Weblogic 一起使用的)无法与 Tomcat 6 一起使用。所以我被迫使用log4j.properties.

我无法弄清楚如何在log4j.properties. 所以我的问题是如何将以下log4j.xml条目转换为log4j.properties

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="vccashib" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    <param name="File" value="vccashib_10.log"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %t %-5p %c - %m%n"/>
    </layout>
  </appender>

  <logger name="org.hibernate">
    <level value="DEBUG"/>
    <appender-ref ref="vccashib" />
  </logger>

</log4j:configuration>

因此,假设我要编写一个记录器来捕获com.abc.xyz层次结构中类的日志。我如何在 中表示log4j.properties?(我已经处理了其他值,例如附加程序的类型、DatePattern、ConversionPattern、FileName、布局等)

请注意,我已向您发送了唯一特定于问题的代码。

或者,如果您知道如何将log4j.xml其作为我使用 Tomcat 6 的战争档案的一部分的答案(JULI jars 已经到位并且可以很好地使用log4j.properties),请告诉我

请帮忙。

苏哈斯

4

5 回答 5

2

我对你的问题并不完全清楚。我已经部署log4j在tomcat 6上没有问题(你能发布你在xml配置中遇到的具体问题吗?)。我不确定您所说的“我已经弄清楚如何log4j.properies使用 Tomcat 6 以及在 Tomcat 6 中使用 JULI 日志记录机制的其他 jars”是什么意思)。

  • 配置是否在正确的位置?
  • $TOMCAT_HOME/lib是否从全局 tomcat ( ) 目录加载了一些 jar ?如果是这样,库可能会从全局目录而不是您的 webapp 中查找配置。

如果您只是在谈论如何在log4j配置中管理单独的类层次结构,则类似于:

log4j.rootCategory=INFO,stdout

#e.g. not interested in most stripes or spring warnings
log4j.logger.net.sourceforge.stripes=ERROR
log4j.logger.org.springframework=ERROR

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d %-5p [%t] %c{1} %3x - 
%m%n

#This creates the separate log "Foo" at DEBUG level. Everythign within 
#the "com.foo" package will
# get logged here
log4j.category.com.foo=DEBUG,Foo
log4j.appender.Foo=org.apache.log4j.RollingFileAppender
log4j.appender.Foo.layout=org.apache.log4j.PatternLayout
log4j.appender.Foo.layout.ConversionPattern=%-d %-5p [%t] %c{1} %3x - %m%n
log4j.appender.DetailLogFile.File=foo.log
#this is the important line - if this isn't here the stuff in
#com.foo package will show up in both logs.
log4j.additivity.com.foo=false
于 2009-04-24T17:46:25.163 回答
0

我们正在使用带有log4j. 我们按照以下手册在 tomcat中安装log4j- 它比旧版本(4.1-5.5)更复杂。我相信你应该把你log4j.xmlWEB-INF/classes目录放在你的战争中。

另一种方法是为此使用 spring 框架 - 请参阅Log4jConfigListener 的 API

于 2009-04-27T11:43:28.647 回答
0

在我看来,即使使用 log4j.xml,创建日志也没有问题

我确实按照建议使用http://tomcat.apache.org/tomcat-6.0-doc/logging.html来创建日志记录机制。

有趣的是,日志是在 Tomcat 6 的 bin 目录中创建的!!!这与当前工作目录有关,在我的情况下,根据某些 Catalina 设置,它似乎是 bin 目录

于 2009-06-04T19:21:28.393 回答
0

根据http://boncy.org/2006_7_25_log4j_with_xml_configuration

  1. export CATALINA_OPTS="-Dlog4j.configuration=log4j.xml"(我想强迫它寻找.xml而不是.properties
  2. log4j.xml文件放入WEB-INF/classes

我有一个类似的问题,这对我有用。

于 2012-01-04T19:39:13.437 回答
0

下面描述的几个简单步骤将帮助您设置要初始化的 Web 应用程序的 log4j:

1)复制log4j.xml到您的(TOMCAT_HOME)/CATALINA_HOME/conf目录。我的log4j.xml应用程序如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
 <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d{ABSOLUTE}
      %5p %c{1}:%L -Preetam %m%n"/>

        </layout>
     </appender>
       <root>
        <!--   <priority value="info"></priority> -->
               <priority value="debug"></priority>
          <appender-ref ref="stdout"/>
        </root>
</log4j:configuration>

2)停止tomcat

tomcat6 stop /var/tmp/tomcat-20120622.log (use your application specific stop.sh script)

3)在(TOMCAT_HOME)/CATALINA_HOME/conf目录中,您将拥有该tomcat6.conf文件。如下所述编辑文件。如果 中没有CATALINA_OPTS,则tomcat6.conf创建一个。

# Settings for the CATALINA_OPTS to pick web application's log4j.xml from the specified location
CATALINA_OPTS="${CATALINA_OPTS}-Dlog4j.debug - Dlog4j.configuration=file:${CATALINA_HOME}/conf/log4j.xml"

4) 使用您的应用程序特定startup.sh脚本启动 tomcat。

5) 就这样,你们都完成了。查看日志看tomcat是否在读取log4j.xml你指定的tomcat6.conf.

tail -f /var/tmp/tomcat-20120622.log

Jun 22, 2012 3:28:35 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory examples
Jun 22, 2012 3:28:35 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Jun 22, 2012 3:28:35 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Jun 22, 2012 3:28:35 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/12  config=null
Jun 22, 2012 3:28:35 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 547 ms
log4j: Using URL [file:/opt/otccalypso/guiadmd01/tomcat6/conf/log4j.xml] for automatic    log4j configuration.
log4j: Preferred configurator class: org.apache.log4j.xml.DOMConfigurator
log4j: System property is :null
log4j: Standard DocumentBuilderFactory search succeded.
log4j: DocumentBuilderFactory is: com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
log4j: debug attribute= "null".
log4j: Ignoring debug attribute.
log4j: Threshold ="null".
log4j: Level value for root is  [debug].
log4j: root level set to DEBUG
log4j: Class name: [org.apache.log4j.ConsoleAppender]
log4j: Parsing layout of class: "org.apache.log4j.PatternLayout"
log4j: Setting property [conversionPattern] to [%d{ABSOLUTE}        %5p %c{1}:%L -Preetam %m%n].
log4j: Adding appender named [stdout] to category [root].
于 2012-06-22T13:35:20.727 回答