web-dev-qa-db-fra.com

Remplacement des configurations de déconnexion

Existe-t-il un moyen de remplacer les configurations de déconnexion? Je sais que nous définissons les configurations de déconnexion dans le fichier nommé logback.xml (généralement stocké dans le chemin src/resources) et je sais qu'en utilisant <include> tag nous pouvons définir un fichier externe à ajouter à logback.xml comme ci-dessous:

<configuration>

<!--<include url="file:///d:/ServerConfig.xml"/>-->
<include file="${outPut}/ServerConfig.xml"/>


<logger name="Server" LEVEL="DEBUG">
    <appender-ref ref="FILEOUT" />
</logger>

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <!--<appender-ref ref="FILEOUT" />-->
</root>

</configuration>

Mais que se passe-t-il si je veux remplacer cette configuration par défaut (par exemple, définir l'enregistreur racine, le niveau sur INFO)

en passant, voici le fichier inclus:

<included>

<!-- <property file="d:/ServerSysVar.properties"/>-->
<property file="${outPut}/ServerSysVar.properties"/>


<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>



<appender name="FILEOUT" class="ch.qos.logback.core.FileAppender">
    <file>${Sys_Location}/Serverfile4.log</file>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %class{36}.%M %L CLIENT_PORT:%X{ClientPort}- %msg%n</pattern>
    </encoder>
</appender>


<logger name="Service" LEVEL="DEBUG">
    <appender-ref ref="FILEOUT" />
</logger>

 <root>
    <appender-ref ref="STDOUT" />
   <!-- <appender-ref ref="FILEOUT" />-->
</root>

</included>
27
Mr.Q

Je ne pense pas que vous puissiez écraser logback.xml- définitions d'un fichier inclus.

Mais j'ai une approche qui résout votre question concernant la substitution du niveau root-logger, en utilisant substitution de variable avec des valeurs par défaut:

logback.xml

<configuration>
  <include file="includedFile.xml" />

  <!-- STDOUT appender stuff -->

  <root level="${root.level:-DEBUG}">
    <appender-ref ref="STDOUT" />
  </root>
<configuration>

includedFile.xml

<included>

  <!-- override the default value; or comment out to leave it at default -->
  <property name="root.level" value="INFO" />

</included>

Avec ce concept, j'ai même pu contrôler la sortie vers plusieurs appenders à partir du fichier inclus:

logback.xml

<configuration>
  <include file="includedFile.xml" />

  <!-- STDOUT appender stuff -->

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>${file.level:-ALL}</level>
    </filter>
    <file>/path/to/logfeil.log</file>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>${syslog.level:-OFF}</level>
    </filter>
    <syslogHost>localhost</syslogHost>
    <facility>${syslog.facility:-LOCAL1}</facility>
    <suffixPattern>${syslog.pattern:-[%thread] %logger{36} - %msg}</suffixPattern>
   </appender>

  <logger name="my.package" level="${logging.level:-INFO}" additivity="false">
    <appender-ref ref="FILE" />
    <appender-ref ref="SYSLOG" />
  </logger>

  <root level="${root.level:-DEBUG}">
    <appender-ref ref="STDOUT" />
  </root>
<configuration>

Et dans le includedFile.xml Je peux contrôler si, et à quel niveau le message doit passer par les appenders FILE et SYSLOG, en définissant les propriétés file.level, syslog.level et bien sûr logging.level.

22
Hank

J'ai eu un problème similaire auquel cette réponse semble la meilleure approche.

Dans mon cas, j'avais besoin de remplacer le fichier inclus pour désactiver complètement l'un des appenders.

En utilisant la variable a pour la valeur du niveau de journalisation, on peut la changer sur OFF.

<included>
  (...)
  <root level="${root.level.console:-DEBUG}">
    <appender-ref ref="CONSOLE" />
  </root>
  <root level="${root.level.file:-DEBUG}">
    <appender-ref ref="FILE" />
  </root>
</included>

Comme indiqué dans http://logback.qos.ch/manual/configuration.html#rootElement

<configuration>
  <include resource="base.xml" />
  (...)
  <property name="root.level.console" value="OFF" />
</configuration>
2
tiago