2010-11-05 55 views
2

我試圖在生產環境中的單獨文件中維護log4j配置。我有此log4j.properties文件(其在生產駐留在WEB-INF/classes):使用grails.config.locations在Grails生產環境中配置Log4j

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 

我完全從Config.groovy除去log4j配置。並根據此評論http://jira.codehaus.org/browse/GRAILS-2730?focusedCommentId=137021&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_137021第二個選項我Config.groovy加入log4j.properties的位置是這樣的:

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) 
... 

我不明白爲什麼..任何人?

謝謝。

回答

1

默認情況下,性質文件(如沒有被編譯的任何其他資源)是複製到WEB-INF/classes中文件夾中。

複製它們,手動,在項目中創建文件腳本/ Events.groovy的並添加以下代碼(假設你的性能文件是在應用程序根目錄):

eventCompileEnd = { 
    ant.copy(todir:classesDirPath) { 
     fileset(file:"${basedir}/*.properties") 
    } 
} 
+0

但我部署的WAR - 我指的是web應用程序,由'Grails的war'作出部署WAR - 在'WEB-INF/classes'中有文件'log4j.properties'。 – Grigory 2010-11-05 14:59:41

+0

抱歉,誤解。 – robbbert 2010-11-05 15:22:02

3
java.io.FileNotFoundException: stacktrace.log (Permission denied) 

應該表示Tomcat正在運行的用戶在Log4J嘗試創建stacktrace.log文件的文件夾中沒有正確的寫入權限。默認情況下,當Tomcat啓動時,它已經是工作目錄的this is the folder

您可以指定一個自定義stacktrace.log位置與log4j.appender.stacktraces.File配置選項,like so

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 
+0

我已經採取了你的配置,改變了一點: log4j.logger.stacktraces = INFO,蹤跡 log4j.additivity.stacktraces =假 log4j.appender.stacktraces = org.apache.log4j.DailyRollingFileAppender log4j.appender。 stacktraces.File =/var/log/tomcat6/fooStacktraces.log log4j.appender.stacktraces.DatePattern = .yyyy-MM-dd log4j.appender.stacktraces.layout = org.apache.log4j.PatternLayout log4j.appender。 stacktraces.layout.ConversionPattern =%d {yyyy-MM-dd/HH:mm:ss.SSS/zzz}%p%m%n – Grigory 2010-11-06 21:12:50

+0

之後,'fooStacktraces.log'確實被創建。但我發現我的webapp仍然試圖在CATALINA_BASE目錄中創建'stracktraces.log'。我不明白爲什麼會發生這種情況。在我的腦海裏,'grails.config.locations'屬性的全部重點是*將log4j配置完全從'Config.groovy'中移除。但我的應用程序嘗試嘗試創建自己的'stacktraces.log'。事實證明,我做了我的新配置,但沒有關閉默認的配置。爲什麼? – Grigory 2010-11-06 21:13:09

+0

對不起,log4j conf在這裏的註釋中沒有很好的格式。 – Grigory 2010-11-06 21:14:47