2013-08-13 5 views
5

Я пытаюсь настроить stout для сохранения в файл. Однако он не сохраняется в файле - у вас есть идея, почему ?. также - я хочу, чтобы имя файла журнала было сконфигурировано внутри logback.xml что-то вроде {LOG_FILE_NAME}, которое будет получено из cmd - возможно ли это?Конфигурация Logback.xml

Это мой logback.xml:

<?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> 

ответ

2

Для первого ответа, проверьте здесь: https://github.com/abdulwaheed18/Slf4jTutorial

Второй Ответ: Вы должны использовать SIFT Appender принять системные параметры для файла.

<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

Свойство может быть установлено в командной строке как:

java -DUSER_HOME="/home/sebastien" MyApp2 

Вы также можете установить эти свойства на уровне системы. LogBack сначала рассмотрит свойства конфигурации, затем в свойствах java-системы, затем в свойствах системы.

Используйте следующую конфигурацию, чтобы писать STDOUT на консоль и в файл:

<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), почему вы использовали файл заглавными буквами !!

<File>sarit_test.log</File> 

должно быть

<file>sarit_test.log</file> 

это одна из ошибок, которые вы сделали, попробуйте исправить его (Mybe это помогает!) И в следующий раз попробуйте добавить сообщение об ошибке в ваших вопросах.

1

Единственное, что я вижу сразу, это то, что вы только открыли <rollingPolicy>, но сама политика пуста. Уверен, что это создает некоторые проблемы.

Для второй части вашего вопроса, да, это возможно, и самый простой способ, вероятно, определить «постоянный», значение которого будет задано классом в вашем приложении.

Я переработал ваш logback.xml, чтобы включить оба предложения выше. Я понимаю, что сейчас уже год, но он может быть полезен другим людям, которые ищут похожие проблемы.

<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>  
Смежные вопросы