当使用log4j时,程序创建多个文件,但只填充一个,当应该填充所有文件时

iyfjxgzm  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(111)

在大学里我们现在正在做一个项目,作为其中的一部分,我们正在尝试添加一个部分,它将使用log4j将所有错误和异常输出到外部文件。
我们希望有一个错误文件,一个警告文件和一个所有的文件,它还将包括一切都是正确的消息。为了彻底的测试,我们添加了一些错误,应该发生。我们还希望记录所有的异常作为警告,并输出到单独的文件。

在现阶段,存在一个问题:程序创建了四个文件,需要三个,另外一个是它自己添加的,其中也包括调试消息。但是,由于某些原因,警告和错误的信息只会进入INFO日志,而它也应该进入它们自己的日志文件。
回登录文件:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${log.name}</file>
    <append>true</append>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
    </encoder>
</appender>

<appender name="ERRORS-FILE" class="ch.qos.logback.core.FileAppender">
    <file>${log.name}.errors</file>
    <append>true</append>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{36} - %msg %n</pattern>
    </encoder>
</appender>

<appender name="WARNINGS-FILE" class="ch.qos.logback.core.FileAppender">
    <file>${log.name}.warnings</file>
    <append>true</append>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{36} - %msg %n</pattern>
    </encoder>
</appender>

    <appender name="INFO-FILE" class="ch.qos.logback.core.FileAppender">
    <file>${log.name}.info</file>
    <append>true</append>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-4relative [%thread] %-5level %logger{36} - %msg %n</pattern>
    </encoder>
</appender>

<!-- additivity=false ensures analytics data only goes to the analytics log -->

<logger name="errors" level="ERROR" additivity="true">
    <appender-ref ref="ERRORS-FILE"/>
</logger>

<logger name="warnings" level="WARN" additivity="true">
    <appender-ref ref="WARNINGS-FILE"/>
</logger>

<logger name="info" level="INFO" additivity="true">
    <appender-ref ref="INFO-FILE"/>
</logger>

<root>
    <appender-ref ref="FILE"/>
</root>

我创建的LoggerManager类用于从其他类输出日志:

package com.evgenie_tomer_itay.CouponSystemSpringBoot.utilities;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LoggerManager
{
    private final static Logger loggerErrors = LoggerFactory.getLogger("errors");
    private final static Logger loggerWarnings = LoggerFactory.getLogger("warnings");
    private final static Logger loggerInfo = LoggerFactory.getLogger("info");

    private static String getCurrentDateAsString()
    {
        SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
        Date date = new Date(System.currentTimeMillis());

        return formatter.format(date);
    }

    public static void addLogInfo(String log)
    {
        LoggerManager.loggerInfo.info(log);
    }

    public static void addLogWarnings(String log)
    {
        LoggerManager.loggerWarnings.info(log);
        LoggerManager.loggerInfo.info(log);
    }

    public static void addLogErrors(String log)
    {
        LoggerManager.loggerErrors.info(log);
        LoggerManager.loggerInfo.info(log);
    }
}

相依性:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.7</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.7</version>
    </dependency>

此部分在main的开头创建文件:

public static void createLogFiles()
{
     String desktopPath = System.getProperty("user.home") + File.separator + "Desktop";
     String fileName = desktopPath+"\\CouponSystemSpringBootLog";
     System.setProperty("log.name",fileName);
}

如何从任何类创建日志的示例:

(以下简称“错误”)

现在,“addLogInfo”再次起作用,但“addLogError”或“addLogWarning”无效。

请帮助了解做错了什么。
先谢谢你!

pieyvz9o

pieyvz9o1#

public static void addLogInfo(String log) {
        myLogger.info(log);
    }

    public static void addLogErrors(String log)
    {
        myLogger.info(log);
    }

您可以使用类似于这些方法的方法来区分信息日志和错误日志,但方法的名称对此没有影响。
您需要调用记录器的正确方法:

public static void addLogInfo(String log) {
        myLogger.info(log);
    }

public static void addLogErrors(String log) {
    myLogger.error(log);
}

相关问题