log4j2 de configuration xml - Log fichier et de la console (avec différents niveaux)

je veux faire deux choses:

  1. se Connecter à la console avec un certain log-level
  2. Log fichier avec un autre log-level

journalisation de la Console semble fonctionner très bien, mais le fichier journal garde étant vide.

C'est mon log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>  

  </appenders>
  <loggers>

    <logger name="filelogger" level="error">
        <appender-ref ref="MyFile"/>
    </logger>

    <root level="info">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

Ce qui ne va pas?

26
demandé sur daker 2013-07-02 10:07:41

4 réponses

j'ai tout compris! <Logger> l'étiquette ne devrait pas être utilisée dans ce cas, voir la réponse de Gaurang Patel pour plus de détails.

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>

    <File name="MyFile" fileName="logs/app.log">
        <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>             
  </appenders>

  <loggers>     
    <root level="debug">
      <appender-ref ref="Console" level="info"/>
      <appender-ref ref="MyFile" level="error"/>
    </root>    
  </loggers>
</configuration>
47
répondu daker 2018-01-23 22:10:12

bien que Daker ait mis le fichier de configuration corrigé mais il ne l'a pas expliqué. Je voudrais ajouter explication ici. Comme indiqué dans la Documentation de Log4j2 ici, l'utilisation de la balise n'était pas requise pour l'exigence donnée. Plus loin, quand devez-vous utiliser la balise ? Lire ci-dessous l'explication de la documentation,

peut-être est-il souhaitable d'éliminer toute TRACE de tout sauf com.foo.Bar. Changer simplement le niveau de log pas accomplir la tâche. Au lieu de cela, la solution est d'ajouter un nouveau logger définition de la configuration:

<Loggers>
  <Logger name="com.foo.Bar" level="TRACE"/> 
  <Root level="ERROR">  
    <AppenderRef ref="STDOUT"> 
  </Root>
  ...
</Loggers>
14
répondu Gaurang Patel 2015-05-19 09:39:51

<logger name="filelogger" level="error" >

Cela devrait être le problème. Le nom de l'enregistreur est habituellement le nom de votre paquet (à moins que vous ne l'ayez spécifiquement nommé filelogger).

<logger name="com.yourpackage" level="error" additivity="true">

Consulter Log4j2 Doc

5
répondu basiljames 2013-07-03 04:09:52

j'utilise <ThresholdFilter /> et <AppenderRef level=""> pour ce faire

  • Console sortie:
  • app.journal: >= info, sauf erreur
  • erreur.journal: >= erreur

voir

<?xml version="1.0" encoding="UTF-8"?>      
<Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel's error log in console-->
    <Properties>
        <Property name="APP_LOG_ROOT">Your log's path</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        </Console>
        <RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log">
            <!-- Except Error -->
            <ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
            <PatternLayout>
                <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
        <RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="trace" >
            <AppenderRef ref="Console" level="trace" />
            <AppenderRef ref="fileLogger" level="info" />
            <AppenderRef ref="errorLogger" level="error" />
        </Root>
    </Loggers>
</Configuration>
0
répondu 周宏成 2018-07-27 11:23:51