简体   繁体   中英

Log4j does not print to console nor write to file


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class AzulMain {


  private static final Logger LOGGER = LogManager.getLogger(AzulMain.class.getName());


  public static void main(String[] args){

    LOGGER.info("Maybe my first Logger works?");

  }
}

The imports work fine. I use these jar-files:

  • log4j-1.2-api-2.17.2.jar
  • log4j-api.2.17.2.jar
  • log4j-core-2.17.2.jar

And this is how my XML-file (log4j2.xml) looks. It is in the same folder as my AzulMain :

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
  <Properties>
    <Property name="log-path">log/${date:yyyy-MM-dd HH-mm-ss-SSS}</Property>
    <Property name="archive">${log-path}/archive</Property>
  </Properties>
  <Appenders>
    <Console name="Console-Appender" target="SYSTEM_OUT">
      <PatternLayout>
        <pattern>
          %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
        </pattern>
      </PatternLayout>
    </Console>
    <File name="File-Appender-AzulMain" fileName="${log-path}/Azul.log">
      <PatternLayout>
        <pattern>
          %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
        </pattern>
      </PatternLayout>
    </File>
    <RollingFile name="RollingFile-Appender"
      fileName="${log-path}/rollingfile.log"
      filePattern="${archive}/rollingfile.log.%d{yyyy-MM-dd@HH-mm}.gz">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
      <Policies>
        <TimeBasedTriggeringPolicy/>
        <SizeBasedTriggeringPolicy size="30 MB"/>
      </Policies>
      <DefaultRolloverStrategy max="30"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Logger name="AzulMain" level="trace" additivity="false">
      <AppenderRef ref="File-Appender-AzulMain" level="all"/>
      <AppenderRef ref="Console-Appender" level="info"/>
    </Logger>
    <Root level="debug" additivity="false">
      <AppenderRef ref="Console-Appender"/>
    </Root>
  </Loggers>
</Configuration>

When I use JavaUtilLogger everything works quite fine so far, I can make it create a file and print to console, however, with log4j nothing works.

I tested deleting the XML file and adding BasicConfigurator.configure() into my main-method, but it still didn't work. If I start my main-method all I get is:

Process finished with exit code 0

What is strange to me is that when I use the command java -Dlog4j.debug -cp AzulMain , it does not show me my configuration as I would expect it, but just what seems to be a very generic help message.

It is my first time, I am using a logger. Does anyone know what the problem might be?

Update : This helped me as a first step:

BasicConfigurator replacement in log4j2

I deleted the XML-file and used the new

Configurator.initialize(new DefaultConfiguration());
Configurator.setRootLevel(Level.INFO);

And now it works at least in so far as it prints to the console. However, I am still not able to make it use the log4j2.xml file. I tried naming it log4j2-test.xml, too. ( Source ) It did not make a difference.

Now it works. This is how I did it.

I set up a new project, with just a main-class and added a new xml-file with a file logger only at first, then added a logger to the console, too. I deleted cache in IntelliJ and deleted the Configurator-lines in the code.

This is the new XML-file log4j2.xml that made it work:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
  <Properties>
    <Property name="basePath">log/${date:yyyy-MM-dd HH-mm-ss-SSS}</Property>
  </Properties>

  <!-- File Logger -->
  <Appenders>
    <!-- Console appender configuration -->
    <Console name="Console-Appender" target="SYSTEM_OUT">
      <PatternLayout>
        <pattern>
          %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n
        </pattern>>
      </PatternLayout>
    </Console>

    <RollingFile name="fileLogger"
      fileName="${basePath}/Azul.log"
      filePattern="${basePath}/app-%d{yyyy-MM-dd}.log">
      <PatternLayout>
        <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
        </pattern>
      </PatternLayout>
      <Policies>
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <SizeBasedTriggeringPolicy size="10MB" />
      </Policies>
      <!-- Max 10 files will be created everyday -->
      <DefaultRolloverStrategy max="10">
        <Delete basePath="${basePath}" maxDepth="10">
          <!-- Delete all files older than 30 days -->
          <IfLastModified age="30d" />
        </Delete>
      </DefaultRolloverStrategy>
    </RollingFile>
  </Appenders>

  <Loggers>
    <Root level="info" additivity="false">
      <appender-ref ref="fileLogger" />
      <appender-ref ref="Console-Appender" level="info"/>
    </Root>
  </Loggers>
</Configuration>

It seems to me to have been a mistake somewhere in the xml-file that I just couldn't figure out where it is.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM