2013-08-13 32 views
5

Tôi đang cố định cấu hình phần mềm để lưu vào một tệp. Tuy nhiên, nó không được lưu vào một tập tin - bạn có một ý tưởng tại sao ?. cũng - Tôi muốn tên tệp nhật ký sẽ được định cấu hình bên trong logback.xml thứ gì đó như {LOG_FILE_NAME} sẽ đến từ cmd - có thể không?Cấu hình Logback.xml

Đây là logback.xml tôi:

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

<!-- For assistance related to logback-translator or configuration --> 
<!-- files in general, please contact the logback user mailing list --> 
<!-- at http://www.qos.ch/mailman/listinfo/logback-user    --> 
<!--                --> 
<!-- For professional support please see       --> 
<!-- http://www.qos.ch/shop/products/professionalSupport   --> 
<!--                --> 
<configuration> 
    <appender name="defaultLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender--> 
    <File>sarit_test.log</File> 
    <encoder> 
     <pattern>%d{dd MMM yyyy HH:mm:ss.SSS} [%t] %-5p %x %F:%L - %m</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"/> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <MaxFileSize>50000KB</MaxFileSize> 
    </triggeringPolicy> 
    </appender> 
    <root level="INFO"> 
    <appender-ref ref="defaultLog"/> 
    </root> 
</configuration> 

Trả lời

2

Đối với câu trả lời đầu tiên, Kiểm tra ở đây: https://github.com/abdulwaheed18/Slf4jTutorial

Second Trả lời: Bạn phải sử dụng SIFT appender để có thông số hệ thống cho tập tin.

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> 
    <!-- in the absence of the class attribute, it is assumed that the desired 
     discriminator type is ch.qos.logback.classic.sift.MDCBasedDiscriminator --> 
    <discriminator> 
     <key>FILE_NAME</key> 
     <defaultValue>DEFAULT_FILE_NAME</defaultValue> 
    </discriminator> 
    <sift> 
     <appender name="FILE-${FILE_NAME}" 
      class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <filter class="ch.qos.logback.core.filter.EvaluatorFilter"> 
       <evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator --> 
        <expression>return message.contains("Broken pipe");</expression> 
       </evaluator> 
       <OnMismatch>NEUTRAL</OnMismatch> 
       <OnMatch>DENY</OnMatch> 
      </filter> 
      <File>${LOGDIR}/${FILE_NAME}.log</File> 
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <FileNamePattern>${LOGDIR}/${FILE_NAME}.%d{yyyy-MM-dd}.%i.log.gz 
       </FileNamePattern> <!-- keep 30 days' worth of history --> 
       <MaxHistory>30</MaxHistory> 
       <!-- Limit all logs size to 300MB --> 
       <timeBasedFileNamingAndTriggeringPolicy 
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
        <!-- or whenever the file size reaches 10MB --> 
        <maxFileSize>10MB</maxFileSize> 
       </timeBasedFileNamingAndTriggeringPolicy> 
      </rollingPolicy> 
      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
       <Pattern>%date [%thread] %-5level %logger{36} - %msg%n</Pattern> 
      </encoder> 
     </appender> 
    </sift> 
</appender> 
1

Thuộc tính có thể được đặt ở dòng lệnh như:

java -DUSER_HOME="/home/sebastien" MyApp2 

Bạn cũng có thể thiết lập các thuộc tính ở cấp độ hệ thống. Đầu tiên, LogBack sẽ xem xét các thuộc tính cấu hình, sau đó tại các hàm thích hợp của hệ thống java, sau đó tại các thuộc tính hệ thống.

Sử dụng cấu hình sau đây để viết STDOUT ra cửa sổ Console và một File:

<configuration> 

    <!-- LOG_FILE_NAME: Java system properties set on the command line --> 
    <!-- LOG_HOME: Set at this line below --> 
    <property name="LOG_HOME" value="/home/sebastien" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%date %-5level [%thread] - [%logger]- %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>${LOG_HOME}/${LOG_FILE_NAME}</file> 
     <encoder> 
      <pattern>%date %-5level [%thread] - [%logger] - %msg%n</pattern> 
     </encoder> 
    </appender> 


    <root level="WARN"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </root> 
</configuration> 
1

ooghh !! (Hommer simpson) tại sao bạn sử dụng tập tin bằng chữ in hoa !!

<File>sarit_test.log</File> 

nó phải được

<file>sarit_test.log</file> 

này là một trong những sai lầm mà bạn đã thực hiện, cố gắng sửa chữa nó (mybe nó sẽ giúp!) Và thời gian tiếp theo cố gắng thêm các thông báo lỗi trong câu hỏi của bạn.

1

Một điều tôi thấy ngay lập tức là bạn chỉ mở <rollingPolicy> nhưng bản thân chính sách trống. Tôi đặt cược rằng tạo ra một số vấn đề.

Đối với phần thứ hai của câu hỏi của bạn, có, có thể và cách đơn giản nhất có thể là xác định giá trị "không đổi" của ai sẽ được đặt bởi lớp trong ứng dụng của bạn.

Tôi đã làm lại logback.xml của bạn để kết hợp cả hai đề xuất ở trên. Tôi nhận ra đây là một năm nay, nhưng nó vẫn có thể hữu ích cho những người khác đang tìm kiếm các vấn đề tương tự.

<configuration> 
    <define name="logPath" class="path.to.your.Class.with.public.method.getLogPath"> 
    <key>getLogPath</key> 
    </define> 

    <appender name="defaultLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender--> 
    <File>${logPath}${file.separator}sarit_test.log</File> 
    <encoder> 
     <pattern>%d{dd MMM yyyy HH:mm:ss.SSS} [%t] %-5p %x %F:%L - %m</pattern> 
    </encoder> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"/> 
     <fileNamePattern>${logPath}${file.separator}sarit_test.log.%i.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>5</maxIndex> 
    </rollingPolicy> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <MaxFileSize>50000KB</MaxFileSize> 
    </triggeringPolicy> 
    </appender> 
    <root level="INFO"> 
    <appender-ref ref="defaultLog"/> 
    </root> 
</configuration>