2016-11-14 2 views
2

Ci-dessous, j'ai une configuration de logback appliquée globalement.Différents niveaux de consignation pour différentes classes

Je voudrais faire le niveau de journalisation ERROR globalement, sauf pour une classe. Pour une classe spécifique, je veux faire le niveau de journalisation INFO. Comment puis je faire ça?

<configuration scan="truef" scanPeriod="30 seconds"> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
      <layout class="com.foo.web.online.util.log.LogMaskingPatternLayout"> 

       <pattern>[START] Date: %d{yyyy-MM-dd} | Time: %d{HH:mm:ss.SSS} | Level: %-5level | Logger: %logger{5} | Marker: %marker | CIP: %X{clientIp} | UserAgent: %X{userAgent} | Website: %X{website} | SID: %X{sessionId} | RID: %X{requestId} | CID: %X{conversationId} | TID: %X{transactionId} | App: %X{app} | SubApp: %X{subApp} | Msg: %msg [END] %n</pattern> 
       </layout>  
      </encoder> 
    </appender> 

    <appender name="SIFT_INFO" class="ch.qos.logback.classic.sift.SiftingAppender"> 
     <discriminator class="ch.qos.logback.classic.sift.JNDIBasedContextDiscriminator"> 
      <defaultValue>unknown</defaultValue> 
     </discriminator> 
     <sift> 
      <appender name="FILE-${contextName}" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
       <file>/opt/local/logs/online/${contextName}.log</file> 
       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
        <fileNamePattern>/opt/local/logs/online/${contextName}-%d{yyyy-MM-dd}.log</fileNamePattern> 
        <maxHistory>7</maxHistory> 
       </rollingPolicy> 
       <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
        <layout class="com.foo.web.online.util.log.LogMaskingPatternLayout"> 
         <pattern>[START] Date: %d{yyyy-MM-dd} | Time: %d{HH:mm:ss.SSS} | Level: %-5level | Logger: %logger{5} | Marker: %marker | CIP: %X{clientIp} | UserAgent: %X{userAgent} | Website: %X{website} | SID: %X{sessionId} | RID: %X{requestId} | App: %X{app} | SubApp: %X{subApp} | Page: %X{page} | Device: %X{device} | Browser: %X{browser} | Lang: %X{language} | IPCountry: %X{geoIpCountry} | IPCity: %X{geoIpCity} | ErrCode: %X{errorCode} | Msg: %msg [END] %n</pattern> 
       </layout> 
        </encoder> 
      </appender> 
     </sift> 
    </appender> 


    <logger name="com.foo" level="INFO"> 
     <appender-ref ref="SIFT_INFO" /> 
     <!-- <appender-ref ref="STDOUT" /> --> 
    </logger> 

    <logger name="org.hibernate.type" level="INFO" /> 
    <logger name="org.hibernate" level="INFO" /> 


</configuration> 

Répondre

2

Vous pouvez utiliser un enregistreur de racine comme tel:

<root> 
    <level value="ERROR"/> 
    <appender-ref ref="STDOUT"/> 
    <appender-ref ref="SIFT_INFO"/> 
</root> 
<logger name="org.mycompany.MyClass"> 
    <level value="INFO"/> 
</logger> 
+0

où avez-vous référence à l'enregistreur org.foo.MyClass? – DarthVader

+0

Vous avez dit que vous vouliez le niveau INFO sur une classe seulement, c'est là que vous mettez le FQN de votre classe (j'ai juste utilisé un exemple). – shayy

+0

ok. Cela fonctionne un peu. sauf qu'il imprime le même journal deux fois. – DarthVader