Конфигурация Log4j в производственной среде Grails с помощью grails.config.locations - PullRequest
2 голосов
/ 05 ноября 2010

Я пытаюсь сохранить конфигурацию log4j в отдельном файле в производственной среде. У меня есть этот log4j.properties файл (который в производстве находится в WEB-INF/classes):

log4j.rootLogger=error, stdout
log4j.rootLogger.additivity=false
log4j.logger.grails.app=info, stdout
log4j.additivity.grails.app=false
log4j.additivity.grails.app.service=false
log4j.logger.grails.app.controller=debug, stdout
log4j.additivity.grails.app.controller=false
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%7r] %6p - %14.14c - %m%n

Я полностью удалил конфигурацию log4j из Config.groovy. И согласно второму варианту в этом комментарии http://jira.codehaus.org/browse/GRAILS-2730?focusedCommentId=137021&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_137021 я добавил местоположение log4j.properties в Config.groovy таким образом:

  production {
    grails.serverURL = "http://xxxxx.ru/${appName}"
    grails.config.locations = [ "classpath:log4j.properties" ]
  }

Но при развертывании приложения я по-прежнему получаю исключение относительно файла stacktrace.log:

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: stacktrace.log (Permission denied)
    at java.io.FileOutputStream.openAppend(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:207)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
    at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
    at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
...

Я не понимаю, почему .. Кто-нибудь?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010
java.io.FileNotFoundException: stacktrace.log (Permission denied)

означает, что пользователь, под которым работает Tomcat, не имеет надлежащих разрешений на запись в папку, в которой Log4J пытается создать файл stacktrace.log . По умолчанию это папка , которая была рабочим каталогом при запуске Tomcat.

Вы можете указать пользовательское stacktrace.log расположение с параметром конфигурации log4j.appender.stacktraces.File, примерно так :

log4j.logger.stacktraces.com.foo=INFO,stacktraces
log4j.additivity.stacktraces=false
log4j.appender.stacktraces=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stacktraces.File=${log.dir}/fooStacktraces.log
log4j.appender.stacktraces.DatePattern=${roll.pattern.daily}
log4j.appender.stacktraces.layout=org.apache.log4j.PatternLayout
log4j.appender.stacktraces.layout.ConversionPattern=%d{${datestamp}}%p%m%n
1 голос
/ 05 ноября 2010

По умолчанию файлы свойств (как и любые другие некомпилированные ресурсы) не копируются в папку WEB-INF / classes .

Чтобы скопировать их вручную, создайте файл scripts / Events.groovy в своем проекте и добавьте следующий код (при условии, что ваш файл properties находится в корневом каталоге приложения):

eventCompileEnd = {
    ant.copy(todir:classesDirPath) {
        fileset(file:"${basedir}/*.properties")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...