如何使用log4j.properties为Java Web Service创建日志文件,而不使用绝对路径

时间:2014-12-11 23:13:43

标签: java web-services tomcat logging absolute-path

我正在尝试为JAX-WS创建一个日志文件。我需要能够构建一个WAR并将其放在Tomcat服务器上而不需要任何其他东西。此WAR将用于许多不同的服务器,其中Tomcat的路径可能并不总是相同。因此,日志文件的位置必须是相对的,并且可能在部署WAR时生成。现在我的日志记录,即使是绝对路径也无法正常工作。我搜索了Stack Overflow并且无法弄清楚我的问题是什么。以下是我的代码,感谢您的帮助。

主档

package lms.foodocs;

....

import org.apache.log4j.Logger;

public class FooDocs{

      static Logger log = Logger.getLogger(FooDocs.class.getName());
      .....
      .....
      .....

      public String getPDF(String data){
         log.info("testing");
         return PDF(data);
      }



      private String PDF(String sourceData){
         try{
             ........
             ........

             log.info("test message);             }

         }catch(Exception e){
           log.error("Doc", e);
           return "crap";
          }

log4j.properties

log4j.rootLogger=info, stdout, R


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout;
log4j.appender.stdout.ConversionPattern =%5 [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=C:/workspace/foo.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R,MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p -%m%n

我的路径

WebContent/

  META-INF/

  WEB-INF/
    classes/
        lms/
          foodocs/
            FooDocs.class
            log4j.properties
     FooDocsService/
     lib/
      server.config.wsdd
      web.xml
      sun-jaws.xml

   wsdl/
      FooDocs.wsdl

2 个答案:

答案 0 :(得分:0)

  1. 在log4j.properties文件中将C:/workspace/foo.log更改为${catalina.base}/logs/foo.log。这会将您的日志文件写入Tomcat安装的logs目录;
  2. 移动您的log4j.properties文件,使其位于WEB-INF / classes /目录的正下方。
  3. 此外,将您的记录器声明为:

    更为常规
        private static final Logger log = Logger.getLogger(FooDocs.class);
    

答案 1 :(得分:0)

由于tomcat总是定义catalina home,你可以使用:

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

您还可以使用其他一些系统属性或创建自己的自定义属性并像这样传递

export JAVA_OPTS="-Dfoo.logging.root=/foo/bar/"

并像这样使用

log4j.appender.R.File=${foo.logging.root}/logs/foo.log