Log4j既不打印到控制台,也不写入文件

eqqqjvef  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(233)
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?");

  }
}

导入工作正常。我使用这些jar文件:

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

这是我的XML文件(log4j2.xml)的样子。它和我的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>

到目前为止,当我使用JavaUtilLogger时,一切都运行得很好,我可以让它创建一个文件并打印到控制台,但是,使用log4j时什么都不工作。
我测试了删除XML文件并将BasicConfigurator.configure()添加到我的main-method中,但仍然不起作用。如果我启动main-method,得到的只是:
Process finished with exit code 0
让我感到奇怪的是,当我使用命令java -Dlog4j.debug -cp AzulMain时,它并没有像我所期望的那样显示我的配置,而是显示了一条似乎非常通用的帮助消息。
这是我第一次使用记录器,有人知道可能是什么问题吗?

更新:这帮助我迈出了第一步:

BasicConfigurator replacement in log4j2
我删除了XML文件并使用了新的

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

现在它至少可以打印到控制台了。但是,我仍然不能让它使用log4j2.xml文件。我也试着把它命名为log4j2-test.xml。(Source)这没有什么区别。

nhhxz33t

nhhxz33t1#

现在成功了。我就是这么做的。
我建立了一个新的项目,只有一个主类,并添加了一个新的xml文件,最初只有一个文件记录器,然后也添加了一个记录器到控制台。我删除了IntelliJ中的缓存,并删除了代码中的配置器行。
这是新的XML文件log4j2.xml,使其工作:

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

在我看来,这似乎是一个错误的地方,在xml文件,我只是不能弄清楚它在哪里。

相关问题