Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相对于应用程序路径的Tomcat log4j日志记录?_Java_Gwt_Tomcat_Log4j - Fatal编程技术网

Java 相对于应用程序路径的Tomcat log4j日志记录?

Java 相对于应用程序路径的Tomcat log4j日志记录?,java,gwt,tomcat,log4j,Java,Gwt,Tomcat,Log4j,我有一个Google Web Toolkit(GWT)应用程序,我以三种不同的模式运行: 部署在Tomcat上 托管模式 Junit测试 如何配置log4j.properties,使这些模式中的每一个都能正确记录? 如果我使用${catalina.base}我不能在托管模式和Junit测试中使用它,如果我只使用相对的logs/myapplication.log,它将无法与Tomcat一起使用,因为这样我会得到: java.io.FileNotFoundException: log/myappli

我有一个Google Web Toolkit(GWT)应用程序,我以三种不同的模式运行:

  • 部署在Tomcat上
  • 托管模式
  • Junit测试
  • 如何配置log4j.properties,使这些模式中的每一个都能正确记录?

    如果我使用
    ${catalina.base}
    我不能在托管模式和Junit测试中使用它,如果我只使用相对的
    logs/myapplication.log
    ,它将无法与Tomcat一起使用,因为这样我会得到:

    java.io.FileNotFoundException: log/myapplication.log (Keine Berechtigung)
    
    如果可以相对于应用程序路径指定日志目录,那么我不介意将日志放在webapps/myapplication/logs中,但是如果日志文件仅位于/var/log/tomcat7/,那么也可以。。。或者其他一些日志文件夹

    目前,my log4j.properties包含以下文件日志记录条目:

    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=${catalina.base}/logs/myapplication.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%c %C %d{ABSOLUTE} %-5p %C{1}: %m%n
    log4j.appender.file.threshold=DEBUG
    log4j.appender.file.Append=false
    

    1。部署在Tomcat上

    我登录到${catalina.home},但您的配置看起来仍然不错。 我在Windows上本地运行我的配置,在启动服务器时没有看到任何关于找不到此文件夹的错误。如果要指向Windows上的某个位置,请尝试将以下内容添加到运行配置中的参数:

    -Dcatalina.base=“C:\somefolder\”-Dcatalina.home=“C:\somefolder\”

    2。托管模式

    在此模式下,您将在IDE中本地运行它。因此,您不需要登录到文件。 在这种情况下,向log4j.properties添加一个
    stdout
    appender

    log4j.rootLogger=DEBUG, stdout, A
    
    这样,您将在IDE的控制台中看到日志消息

    3。JUnit测试


    使用单独的日志配置文件进行测试(这是标准做法)。这允许您更好地控制日志级别,而不会影响生产日志级别。

    我不确定它是否适用于所有情况,但您可以尝试登录到stdout。Tomcat将在其日志目录中的日志文件中捕获它。您没有说明服务器在托管模式下是什么,但这可能也适用于托管模式。我相信JUnit也会捕获stdout。是的,我已经另外登录到stdout,但我不想在启动程序时获得所有这些异常。什么是“所有这些异常”?@greybearedgeek异常,如
    log4j:ERROR setFile(null,true)调用失败。java.io.FileNotFoundException:/logs/user_sessions.html(Datei order Verzeichnis nicht gefunden),位于java.io.FileOutputStream.open(本机方法),位于java.io.FileOutputStream.
    。。。(每个Appender一个)您不需要找到一种方法为托管模式和junit模式设置catalina.base系统属性吗?我对GWT了解不多,但我相信这是可能的。