2010-03-09 26 views
10

Tôi có sau đây để cấu hình DSL log4j của tôi trong Grails 1.2:Tại sao Grails (trong Tomcat) đăng nhập vào cả catalina.out và appender file tùy chỉnh của tôi?

log4j = { 
    appenders { 
     console name: 'stdout', layout: pattern(conversionPattern: conversionPattern) 

     environments { 
      production { 
       // ... some code to determine file path ... 

       rollingFile name: 'file', file: "${logDirectory}/${appName}.log", layout: pattern(conversionPattern: conversionPattern) 
       rollingFile name: 'StackTrace', file: "${logDirectory}/${appName}-stacktrace.log" 
     } 
    } 

    environments { 
     development { root { warn 'stdout' } } 
     test { root { warn 'stdout' } } 
     production { root { error 'file' } } 
    } 

    // ... package-specific logging configurations ... 
} 

Khi tôi triển khai như một cuộc chiến tranh để Tomcat, nhật ký của tôi được ghi vào cả hai catalina.out và 'file' logger của tôi được xác định cho sản xuất.

Tôi đã thử:

  • thêm additivity = false định nghĩa root {} cho production {}, mà không làm việc (và tôi sẽ không thực sự mong đợi nó, vì nó rõ ràng thiết additivity cho logger gốc tự ?).
  • xác định trình điều khiển bảng điều khiển 'stdout' bên trong một khối development {}test {} trong phạm vi đóng cửa appenders {}, nhưng điều đó cũng không hoạt động.

Có lẽ đây là vấn đề với cấu hình Tomcat của tôi chứ không phải DSL log4j của tôi? Gần nhất tôi đã đến để tìm một ai đó với một vấn đề tương tự là this mailing-list thread, mà không có (đơn giản) giải pháp.

Làm cách nào để ngăn các bản ghi được ghi vào catalina.out trong sản xuất?

Trả lời

3

tôi đã có thể làm việc xung quanh vấn đề này bằng cách làm như sau trong Config.groovy:

import org.apache.log4j.Logger 

log4j = { 
    // ... configuration from question ... 
} 

environments { 
    production { 
     def logger = Logger.getRootLogger() 
     logger.removeAppender('stdout') 
    } 
} 

Tuy nhiên, điều này cảm thấy giống như một hack bẩn, và tôi hy vọng có một tốt hơn, Grails log4j DSL-cụ thể cách để làm điều này.

Ngoài ra, bất cứ điều gì ứng dụng có thể xảy ra để ghi vào stdout có thể sẽ không được viết, có thể là một điều xấu nếu có nhật ký/ngoại lệ/stacktraces bằng cách nào đó được viết trực tiếp vào stdout.

Các vấn đề liên quan