Grails - Нет регистрации в Tomcat

Я не могу получить grails log4j logging для работы в Tomcat6. я ранее считалось, что проблема связана с режимом производства, но теперь я считаю, что проблема - это tomcat.

У меня есть конфигурация log4j в моем Config.groovy, которая правильно устанавливает ведение журнала при запуске приложения в STS. Я использую замечательный плагин app-info, который подтверждает, что установлены правильные значения ведения журнала.

Однако, когда я делаю grails war или даже grails dev war с тем же кодом и подключаю его в папку webapps в Tomcat, никаких протоколов не происходит. Когда я просматриваю в app-info для ведения журнала сейчас, я получаю базовый файл log4j.xml, который ничего не собирает внутри моей конфигурации. Кроме того, когда я смотрю на catalina.out, я вижу:

log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.

Для полноты, вот конфигурация, которая работает правильно в STS, но не при непосредственном запуске в Tomcat:

log4j = {
    String logDirectory = "${System.getProperty('catalina.base') ?: '.'}/logs"

    appenders {
        console name: "stdout", layout: pattern(conversionPattern: "%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n")
        file name: "errors", file: "pps-errors.log", layout: pattern(conversionPattern: "%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n")
        appender new org.apache.log4j.DailyRollingFileAppender(name:"roll", datePattern: "'.'yyyy-MM-dd", file:"pps-rolling.log", layout: pattern(conversionPattern: "%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n"))
    }


    root { info "stdout", "roll", "errors" }
    // Log all at the error level
    info 'org.apache.',
    'org.tomcat.',
    'grails.app',
    'org.acegisecurity',
    'org.codehaus.groovy.grails.web.servlet', // controllers
    'org.codehaus.groovy.grails.web.pages', // GSP
    'org.codehaus.groovy.grails.web.sitemesh', // layouts
    'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
    'org.codehaus.groovy.grails.web.mapping', // URL mapping
    'org.codehaus.groovy.grails.commons', // core / classloading
    'org.codehaus.groovy.grails.plugins', // plugins
    'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
    'org.springframework',
    'org.hibernate'
    warn 'grails.app'
}

Здесь выводится вывод журнала приложения, когда он запускается в STS:

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
   <appender name="stacktraceLog" class="org.apache.log4j.FileAppender">
      <param name="file" value="/home/devon/Documents/SynaSync/Projects/ProjectPointSpread/Source/trunk/target/stacktrace.log"/>
      <param name="name" value="stacktraceLog"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="conversionPattern" value="%d [%t] %-5p %c{2} %x - %m%n"/>
      </layout>
   </appender>
   <appender name="roll" class="org.apache.log4j.DailyRollingFileAppender">
      <param name="file" value="pps-rolling.log"/>
      <param name="name" value="roll"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n"/>
      </layout>
   </appender>
   <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
      <param name="name" value="stdout"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n"/>
      </layout>
   </appender>
   <appender name="errors" class="org.apache.log4j.FileAppender">
      <param name="file" value="pps-errors.log"/>
      <param name="name" value="errors"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="conversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss,SSS} [%t] %c %x%n %-5p %m%n"/>
      </layout>
   </appender>
   <logger name="StackTrace" additivity="false">
      <appender-ref ref="stacktraceLog"/>
   </logger>
   <logger name="grails.app">
      <level value="WARN"/>
   </logger>
   <logger name="org.acegisecurity">
      <level value="INFO"/>
   </logger>
   <logger name="org.apache.">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.commons">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.orm.hibernate">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.plugins">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.web.mapping">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.web.mapping.filter">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.web.pages">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.web.servlet">
      <level value="INFO"/>
   </logger>
   <logger name="org.codehaus.groovy.grails.web.sitemesh">
      <level value="INFO"/>
   </logger>
   <logger name="org.hibernate">
      <level value="INFO"/>
   </logger>
   <logger name="org.springframework">
      <level value="INFO"/>
   </logger>
   <logger name="org.tomcat.">
      <level value="INFO"/>
   </logger>
   <root>
      <level value="INFO"/>
      <appender-ref ref="stdout"/>
      <appender-ref ref="roll"/>
      <appender-ref ref="errors"/>
   </root>
</log4j:configuration>

Здесь выводится вывод журнала приложения, когда он выполняется непосредственно в tomcat6:

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
   <logger name="Test">
      <level value="ALL"/>
   </logger>
   <root>
      <level value="DEBUG"/>
   </root>
</log4j:configuration>

Я использую Grails 1.3.7, если это полезно.

Ответ 1

Это имело какое-то отношение к фальшивому файлу web-inf, который был давным-давно. Это работает правильно, если этого не существует.

Ответ 2

Это может быть способ определения вашей среды в конфигурации DSL У меня аналогичная настройка: Grails 1.3.7 + Tomcat 6.0 это отлично работает для меня.

log4j = {
    environments {
        production {
        appenders {
            def catalinaBase = System.properties.getProperty('catalina.base')
            if (!catalinaBase) catalinaBase = '.'
            def logDirectory = "${catalinaBase}/logs"

            /* log file appender config & layout */
            appender new DailyRollingFileAppender(
                name:"logfile",
                file:"$logDirectory/logfilename.log",
                layout:pattern(conversionPattern: "%d{yy.MM.dd HH:mm:ss} [%t] %-5p %c %x - %m%n"),
                datePattern:"'.'yyyy-MM-dd",
                threshold: org.apache.log4j.Level.ERROR 
        }

        /* type of errors to log */
        error  'org.codehaus.groovy.grails.scaffolding.view.ScaffoldingViewResolver', 
               'org.codehaus.groovy.grails.web.servlet',  //  controllers
               'org.codehaus.groovy.grails.web.pages', //  GSP
               'org.codehaus.groovy.grails.web.sitemesh', //  layouts
               'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
               'org.codehaus.groovy.grails.web.mapping', // URL mapping
               'org.codehaus.groovy.grails.commons', // class
               'org.codehaus.groovy.grails.plugins', // plugins
               'org.codehaus.groovy.grails.orm.hibernate', // hibernate
               'org.springframework', // spring
               'org.hibernate', // hibernate



        /* jetty, not required on tomcat */
        warn   'org.mortbay.log'


        /* root logger config */
        root {
            debug 'logfile'
            additivity = true
        }
    }//production

    development{
         /* add config for development evn*/
    }

    test{
         /* add config for test env*/
    } 

}//log4j