Mặc dù tôi đã trao tiền thưởng cho người dùng bên dưới có đã cố gắng trợ giúp, câu hỏi ban đầu vẫn chưa được trả lời. Không tồn tại giải pháp thực tế để đảm bảo rằng logback.groovy được cấu hình ghi nhật ký được vinh danh trong các bài kiểm tra junit. Các bài kiểm tra tải lên cấu hình logback và nó báo cáo mức độ chính xác và chưa vẫn là đăng nhập kiểm tra thực tế (độc quyền thông qua slf4j) đang ở bất kỳ hoặc Trace mứcLogger slf4j không sử dụng mức cấu hình đăng nhập
Tôi biết những người khác đã gặp phải vấn đề này cùng và nó là rất gây phiền nhiễu khi kiểm tra các dự án lớn mất nhiều thời gian hơn do giao diện điều khiển ghi nhật ký quá nhiều chi tiết. Tôi không thể tiếp tục ném tiền thưởng tại số câu hỏi này. Tôi hy vọng một người nào đó đưa ra một giải pháp tốt là cho phép ghi nhật ký kiểm tra được định cấu hình đúng ở các cấp độ khác nhau thông qua thuộc tính hệ thống. Sau đó, các cấu hình khác nhau có thể được tạo cho dự án để các thử nghiệm có thể được định cấu hình ở các mức ngưỡng ghi khác nhau.
đăng nhập của tôi được cấu hình bởi logback thông qua một tập tin logback.groovy
Bây giờ, khi dự án POM Maven tôi rằng tập hợp tất cả các dự án khác bắt đầu, nó đi tất cả tài sản hệ thống để thiết lập mức độ khai thác gỗ đúng.
Tuy nhiên, khi kiểm tra junit chạy, vì lý do nào đó, trình ghi nhật ký không nhận được mức chính xác mặc dù các lớp thử nghiệm static @beforeClass đảm bảo rằng logback được cấu hình đúng.
Nó không phải là Logger trong các bài kiểm tra đó là vấn đề, - cũng - có họ quá--, vấn đề thực sự là logger trong phần mã chạy (tất cả các chương trình logger của tôi ở khắp mọi nơi) được thiết lập đến mức ghi sai. Họ không chọn những gì đăng nhập là khi các bài kiểm tra chương trình được cấu hình.
Tuy nhiên, các dự án đang báo cáo chính xác khi đăng nhập khởi tạo với tệp logback.goovy. Tuy nhiên, mức ghi nhật ký thực tế được đặt thành TRACE hoặc ALL
Từ đầu ra bên dưới, rõ ràng là nhật ký đã được định cấu hình thành INFO. Nhưng tuyên bố đăng nhập dự án đầu tiên tại TRACE (dòng cuối cùng) cho thấy rằng không được chọn.
Trợ giúp.
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running groovy.text.StreamingTemplateEngineTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec
Running net.abcd.templating.InlinerTest
01:22:15,265 |-INFO in [email protected] - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
01:22:15,290 |-INFO in [email protected] - Setting ReconfigureOnChangeFilter scanning period to 5 minutes
01:22:15,290 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\ABDC\Dropbox\workspace\abcd\AbcdTemplating\conf\logback.groovy]] every 300 seconds.
01:22:15,290 |-INFO in [email protected] - Adding ReconfigureOnChangeFilter as a turbo filter
01:22:15,312 |-INFO in [email protected] - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
01:22:15,316 |-INFO in [email protected] - Naming appender as [STDOUT]
***********************************************************
LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [info]
IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO
***********************************************************
getLogLevel() returned 'INFO'
01:22:15,496 |-INFO in [email protected] - Setting level of logger [ROOT] to INFO
01:22:15,532 |-INFO in [email protected] - Attaching appender named [STDOUT] to Logger[ROOT]
01:22:15.846 [main] TRACE net.abcd.templating.Inliner - Document:
tập tin logback.groovy của tôi là:
displayStatusOnConsole()
scan('5 minutes') // Scan for changes every 5 minutes.
setupAppenders()
setupLoggers()
def displayStatusOnConsole() {
statusListener OnConsoleStatusListener
}
def setupAppenders() {
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %-16logger{50} - %msg%n"
}
}
}
def setupLoggers() {
def loglevel = getLogLevel()
println("getLogLevel() returned '${loglevel}'")
root(loglevel, ['STDOUT'])
}
def getLogLevel() {
def mode = System.getProperty('net.abcd.logging.level', '')
println("***********************************************************")
println("")
println("LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [${mode}]")
println("IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO")
println("")
println("***********************************************************")
switch(mode.toLowerCase()){
case 'off':
return OFF
case 'error':
return ERROR
case 'warn':
return WARN
case 'info':
return INFO
case 'debug':
return DEBUG
case 'trace':
return TRACE
case 'all':
return ALL
default:
return INFO
}
}
Tôi không biết liệu nó có hữu ích hay không, nhưng JUnit cài đặt trình nạp lớp của chính nó, được biết là can thiệp vào khung ghi nhật ký. – llogiq
@llogiq Tôi biết. .... Sau đó, tại sao doe cấu hình bắt đầu bởi junit báo cáo chính xác mặc dù các xét nghiệm cá nhân không. Và cách khắc phục điều đó? –