2011-11-07 31 views
5

Tôi cố gắng để thay thế log4j trong ứng dụng Grails của tôi với logback nhưng tôi luôn nhận được mộtGrails: Thay thế log4j với logback

Embedded error: java.lang.reflect.InvocationTargetException 
org.apache.log4j.LogManager 

khi chạy chạy ứng dụng hoặc thử nghiệm ứng dụng.

Tôi đã bao gồm những điều sau đây trong BuildConfig.groovy mà tôi nghĩ là đủ:

inherits("global") { 
    excludes "slf4j-log4j12" 
} 

[...] 

dependencies { 
    build 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29' 
    runtime 'ch.qos.logback:logback-core:0.9.29', 'ch.qos.logback:logback-classic:0.9.29' 
} 

tôi không thể tìm thấy bất kỳ tài liệu tham khảo hơn để Log4J và không có ý tưởng nơi gọi này xuất phát từ ?!

Tôi cũng đang cố gắng thay thế Grails SLF 1.5.8 by 1.6.2 và nhận được như sau trong giao diện điều khiển mặc dù đã loại trừ SLF từ khắp nơi Grails module:

SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8] 
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details. 

Cảm ơn trước sự giúp đỡ nào

Trân

Jonas

Trả lời

3

Logback 0.9.21 trở lên phụ thuộc vào slf4j-api 1.6 đó là những gì lỗi mà là nói cho bạn.

Thêm phụ thuộc cho org.slf4j: slf4j-api: 1,6

3

này đã làm việc cho tôi trong BuildConfig.groovy khi sử dụng Grails 2.1.0:

inherits("global") { 
    excludes 'grails-plugin-log4j'   
} 

[...]

dependencies {  
    compile 'ch.qos.logback:logback-classic:1.0.6' 
    runtime 'ch.qos.logback:logback-classic:1.0.6' 
} 

[...]

this.classLoader.rootLoader.addURL(new File("${basedir}/grails-app/conf/").toURI().toURL()) 

Dòng cuối cùng này làm cho Grails đọc đúng grails-app/conf/logback.groovy nếu bạn muốn đặt cấu hình ở đó.

+0

Trừ 'grails-plugin-log4j' là chìa khóa – fglez

+0

' Logback.groovy' sẽ không hoạt động khi chạy từ WAR, vì nó được biên dịch để Logback. lớp và Logback tìm kiếm nguồn – fglez

0

Tôi đã sử dụng đăng nhập 1.0.6. Nó không hoạt động. Nhưng tôi sử dụng một cách khác. đặt biến môi trường "logback.configurationFile = {groovy file address}". ví dụ:

grails run-app -Dlogback.configurationFile=c:\log\logback.groovy 

Bạn có thể sử dụng thông số này trong tomcat hoặc bất kỳ thông tin nào khác mà bạn đặt tệp chiến tranh vào đó.

Nó phù hợp với tôi.

0

tôi tích hợp Logback để Grails một vài ngày trước - bước của tôi để giải pháp làm việc đang ở đây: Grails 2.1.1 - Logback integration

Ngoài ra, có chỉ là một Plugin mới 'tròn khối: http://grails.org/plugin/logback mà có vẻ đầy hứa hẹn!

Chúc bạn may mắn với vấn đề này - thật đáng để bạn thử sức!

0

Nó có thể hữu ích cho những người khác:

xác định cấu hình trong Config.groovy

logback = { 
    appenders { 
     console name: 'stdout', encoder: pattern(pattern: "%d{dd-MMM-yyyy HH:mm:ss} %-5p %c - %m%n") 

     rollingFile(
       name: 'fileAppender', 
       file: logFileName, 
       encoder: pattern(pattern: "%d{dd-MMM-yyyy HH:mm:ss} %-5p %c - %m%n"), 
       triggeringPolicy: new SizeBasedTriggeringPolicy(maxFileSize: 10*1024*1024), // Max is 10 MB log files 
       rollingPolicy: new FixedWindowRollingPolicy(fileNamePattern: iLogFileName) 
     ) 
    } 

    error fileAppender: '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', 
      'net.sf.ehcache.hibernate' 

    info fileAppender: 'org.springframework.web.client', 
      'com.yourpackage', 
      'com.linkedin.grails' 


    debug fileAppender: 'com.yourpackage', // Set debug level for non-grails artifacts, e.g. src/groovy, under the com.yourpackage.package 
      'grails.app' // Set debug level for all application artifacts 

    trace fileAppender: 'org.springframework.web.client', 
      'org.springframework.social', 
      'com.yourpackage' 

    root { 
     info 'stdout', 'fileAppender' 
    } 
} 
  1. Bao gồm các plugin logback và loại trừ các gói yêu cầu:

trong BuildConfig.groovy

inherits("global") { 
     excludes 'grails-plugin-log4j', 'log4j' //using logback as grails-log4j have serialization issues with spark libraries 
    } 

phụ thuộc bên trong: bao gồm biên dịch 'org.grails.plugins: logback: 0.3.1'

  1. Disable Fork chế độ thực hiện. Nó sẽ không hoạt động với logback.

  2. Các cấu hình ở trên CHỈ hoạt động với chế độ WAR.

  3. Nếu bạn thậm chí muốn kiểm soát ghi nhật ký trong chế độ nhà phát triển địa phương bình thường, hãy bao gồm tệp logback.xml trong thư mục conf của bạn.

logback.xml:

<?xml version="1.0" encoding="UTF-8" ?> 

<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <root level="warn"> 
     <appender-ref ref="STDOUT"/> 
    </root> 
    <shutdownHook/> 
</configuration> 
Các vấn đề liên quan