2011-09-12 34 views
5

Tôi đang sử dụng Log4J để đăng nhập SBT. Trong tệp cấu hình, tôi đã xác định mức TRACE cho nút gốc. Khi tôi chạy dự án (sbt run) tất cả đầu ra gỡ lỗi được hiển thị chính xác. Nhưng khi tôi chạy thử nghiệm (sbt test), không có đầu ra nào được tạo ra. Tôi cần phải chèn lớp vào cấu hình để xem đầu ra.Không có đầu ra Log4J trong sbt khi sử dụng scalatest

Bài kiểm tra được viết theo kiểu JUnit. Thực hiện các bài kiểm tra với Eclipse cho thấy tất cả Log4J Output. Vì vậy, nó có vẻ là một vấn đề với SBT hoặc scalatest.

Log4J Cấu hình:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.EnhancedPatternLayout"> 
     <param name="ConversionPattern" value="%-5r [%-5p] %c: %M - %m%n"/> 
    </layout> 
    </appender> 

    <appender name="asyncApp" class="org.apache.log4j.AsyncAppender"> 
    <appender-ref ref="fileApp"/> 
    </appender> 

    <appender name="fileApp" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="testlog_Compiler"/> 
    <param name="Append" value="true" /> 
    <param name="Threshold" value="ALL"/> 
    <layout class="org.apache.log4j.EnhancedPatternLayout"> 
     <param name="ConversionPattern" value="%d [%-5p] %c: %M - %m%n"/> 
    </layout> 
    </appender> 

    <appender name="fileAppTest" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="testlog_Tests"/> 
    <param name="Append" value="true" /> 
    <param name="Threshold" value="ALL"/> 
    <layout class="org.apache.log4j.EnhancedPatternLayout"> 
     <param name="ConversionPattern" value="%d [%-5p] %c: %M - %m%n"/> 
    </layout> 
    </appender> 

    <logger name="main.Main$" additivity="true"> 
    <level value="INFO" /> 
    </logger> 
<!-- 
    <logger name="compile.Compiler" additivity="true"> 
    <level value="DEBUG" /> 
    </logger> 
--> 
    <logger name="test" additivity="false"> 
    <level value="TRACE" /> 
    <appender-ref ref="stdout"/> 
    <appender-ref ref="fileAppTest"/> 
    </logger> 

    <root> 
    <priority value="TRACE"/> 
    <appender-ref ref="asyncApp"/> 
    <appender-ref ref="stdout"/> 
    </root> 

</log4j:configuration> 

Khi tôi sử dụng phiên bản này của tập tin cấu hình, các bài kiểm tra của compile.Compiler không tạo ra bất kỳ dữ liệu ghi nhận, trừ khi tôi bỏ ghi chú nút của nó trong cấu hình Log4J. Trong tập tin cấu hình SBT, những phụ thuộc được định nghĩa cho compile.Compiler: (Đây chỉ là một ví dụ rất nhỏ.)

class Comp2011ParentProject(info: ProjectInfo) extends DefaultProject(info) { 
    val compiler = project("compile", "compile", new Compile(_)) 
    class compiler(info: ProjectInfo) extends DefaultProject(info) with Eclipsify { 
     val scalatest = "org.scalatest" % "scalatest_2.9.0" % "1.6.1" 
     val junitInterface = "com.novocode" % "junit-interface" % "0.6" % "test->default" 
     val log4j = "log4j" % "log4j" % "1.2.16" 
     val log4jExtras = "log4j" % "apache-log4j-extras" % "1.1" 
    } 
} 

Có ai có một đầu mối tại sao điều này xảy ra và làm thế nào để ngăn chặn nó?

+0

Nếu bạn cố gắng nhập bảng điều khiển sbt ('sbt'), sau đó chạy thử nghiệm (' test') và _immediatelly_ try 'last test', nó có hiển thị đầu ra không? –

Trả lời

0

(Đáng tiếc là tôi bị mất tài khoản của tôi mà đăng câu hỏi này :-(. Nhưng điều này cũng là một số loại câu trả lời.)

cuộc điều tra sau đó cho thấy tại một số điểm trong mã mức cho compile.Compiler logger được thiết lập bằng tay Khi tôi xóa tuyên bố này, mọi thứ đều hoạt động tốt

Sự thật đáng ngạc nhiên về điều này là việc đặt cấp trong một thử nghiệm cũng làm cho tất cả các thử nghiệm sau đây áp dụng mức đăng nhập đó. tệp cấu hình đã được tải lại với mọi thử nghiệm mới.

Tuy nhiên, sau khi lướt qua một số tài liệu, tôi phát hiện ra rằng cấu hình thực tế không được đặt lại khi tải một tệp cấu hình. Để có hành vi này, BasicConfigurator.resetConfiguration() phải được thực hiện trước khi tải cấu hình. Với điều này, mọi thứ hoạt động như mong đợi.

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