Grails 3 sử dụng logback làm hệ thống ghi nhật ký.Sử dụng logback trong grails 3
Tôi cần một ví dụ về cách sử dụng logback trong grails 3 theo hình thức này
log.info("some Info")
Grails 3 sử dụng logback làm hệ thống ghi nhật ký.Sử dụng logback trong grails 3
Tôi cần một ví dụ về cách sử dụng logback trong grails 3 theo hình thức này
log.info("some Info")
import org.slf4j.Logger
import org.slf4j.LoggerFactory
static Logger log = LoggerFactory.getLogger(SomeClass.class)
này hoạt động nhưng tôi cũng đang tự hỏi nếu grails 3 ô tô có thể tiêm log
.
Tôi chỉ xem xét điều này, bởi vì tôi đã có một câu hỏi tương tự. Grails 3 không sử dụng Logback cho cấu hình đăng nhập, nhưng biến đổi AST vẫn sử dụng Apache Commons Logging.
Sau đó sử dụng cây cầu JCL-over-slf4j để lập bản đồ tất cả trở lại tất cả trở lại vào Logback.
Theo danh sách gửi thư, http://grails.1312388.n4.nabble.com/Grails-2-1-1-Is-it-possible-to-replace-the-injected-log-object-td4638834.html, để thay thế cho tiêm log
trên toàn cầu, bạn phải loại trừ sự phụ thuộc khai thác gỗ và thay thế AST Transformer với riêng bạn.
Plugin Logback mà bài đăng trên blog trong nhận xét ở trên đề cập đến điều này: https://github.com/grails-plugins/grails-logback/blob/master/src/java/org/codehaus/groovy/grails/compiler/logging/Slf4jTransformer.java. Tuy nhiên, nó có vẻ như rất nhiều dự phòng, vì Grails 3 đã có hỗ trợ Logback.
Nếu bạn không muốn thực hiện công việc đó để thay đổi quá trình ghi nhật ký, bạn có thể ghi đè lên trình ghi nhật ký bằng cách chú thích lớp học với @Slf4j
và sẽ ghi đè nhật ký cho lớp đó.
cần thiết này cũng trong Grails 3. Tìm thấy bài này bằng cách mrhaki:
tôi thử nghiệm này trên một công việc Quartz. Tôi thêm vào dòng sau trong logback.groovy
logger("grails.app.jobs", INFO, ['STDOUT'])
Sử dụng đăng nhập thử nghiệm trong công việc thạch anh:
log.info "test " + new Date()
chương trình đăng nhập thông tin trong giao diện điều khiển
INFO grails.app.jobs.myapp.TestJob - test Tue Oct 20 10:07:31 CEST 2015
Funny điều đang xảy ra. Tôi thấy 2 dòng trùng lặp cho mỗi log.info
log.info "test"
log.info "test2"
System.out.println("test"3)
Cung cấp cho tôi:
INFO grails.app.jobs.myapp.TestJob - test
INFO grails.app.jobs.myapp.TestJob - test
INFO grails.app.jobs.myapp.TestJob - test2
INFO grails.app.jobs.myapp.TestJob - test2
test3
Thêm 'false' vào' logger ("grails.app.jobs", INFO, ['STDOUT'], false) 'sẽ xóa các mục nhập nhật ký trùng lặp. – Guus
Bạn cần phải thiết lập các tham số thứ tư của cấu hình logger để false
:
logger('grails.app.controllers', INFO, ['STDOUT'], false)
thì khai thác gỗ là không hiển thị hai lần.
Tôi nghĩ đó là do máy ghi root
cũng bắt được INFO
.
Bạn không phải thêm 'false' (tức là cờ bổ sung) nếu bạn cũng xóa phần '['STDOUT']'. Bạn nhận được đăng nhập trùng lặp bởi vì (không có sai), bạn đang nói logback để nối thêm thông qua logger gốc (để STDOUT) VÀ thông qua logger cụ thể này. Loại bỏ STDOUT có nghĩa là nó sẽ chỉ nối thêm thông qua bộ ghi gốc. Xem [tài liệu] (http://logback.qos.ch/manual/architecture.html) để biết giải thích về cờ bổ sung. – GreenGiant
Nhận xét của @GreenGiant là giải pháp cho tôi trong Grails 3.2.1. Ghi nhật ký hoạt động tốt cho "ứng dụng chạy" nhưng không hoạt động cho "ứng dụng thử nghiệm". Sau đó, tôi nhận thấy rằng cấu hình root logger được xử lý "dev" đặc biệt. Tôi chỉ cần mở rộng logic để bao gồm 'test' env, sau đó đăng nhập xuất hiện mà không có bản sao: 'if ((Environment.isDevelopmentMode() || Environment.currentEnvironment == Environment.TEST) ...) { .. .' – jerryb
Ví dụ về tính năng ghi lại ví dụ → https://examples.javacodegeeks.com/enterprise-java/logback/logback-additivity-example/ – pinei
Tôi đã thử như thế này và nó hoạt động tốt. Đây là ví dụ từ petclinic.
chi tiết bổ sung avalable tại logback docs
import grails.util.BuildSettings
import grails.util.Environment
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
}
}
root(ERROR, ['STDOUT'])
if(Environment.current == Environment.DEVELOPMENT) {
def targetDir = BuildSettings.TARGET_DIR
if(targetDir) {
appender("FULL_STACKTRACE", FileAppender) {
file = "${targetDir}/stacktrace.log"
append = true
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
}
}
logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false)
}
}
Tôi đã gặp sự cố khiến tôi đặt câu hỏi về mã này: bạn đã xác nhận dữ liệu đó chưa thực sự đang đi vào tệp stacktrace.log? Nó có thể trông giống như nó đang làm việc vì stacktraces nhấn stdout, nhưng kinh nghiệm của tôi đã được rằng nó không thực sự nhấn stacktrace.log tập tin. Vì vậy, tôi đang cố gắng tìm ra nếu nó chỉ là tôi hoặc nếu đây là một vấn đề với hầu như tất cả các ví dụ trên internet. –
Xem [câu hỏi này] (http://stackoverflow.com/questions/36723285/why-does-stacktrace-log-not-fill-with-logback-in-grails-3) - có vẻ như điều này sẽ không ghi lại vào tệp stacktrace.log. –
Bạn đã thấy điều này? http://jdpgrailsdev.github.io/blog/2014/03/24/grails_logback.html – dsharew