簡體   English   中英

使用 log4j 時,程序創建多個文件但只填充一個,什么時候應該填充所有

[英]When using log4j, program creates mutliple files but fills only one, when should fill all

在大學里,我們現在正在制作一個項目,作為其中的一部分,我們正在嘗試添加一個將使用 log4j 到 output 的所有錯誤和異常到外部文件的部分。

我們希望一個文件用於錯誤,一個用於警告,一個用於所有內容,它還將包含所有內容正確的消息。 為了進行徹底的測試,我們添加了一些應該發生的錯誤。 此外,我們希望將所有異常記錄為警告,並將 output 記錄到單獨的文件中。

在當前階段,有一個問題:程序創建了四個文件,需要三個,還有一個是它自己添加的,其中還包括調試消息。 但是,由於某種原因,有關警告和錯誤的信息僅會出現在 INFO 日志中,而 go 也應該出現在他們自己的日志文件中。

日志文件:

<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 class 用於輸出其他類的日志:

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);
}

我如何從任何 class 創建日志的示例:

LoggerManager.addLogErrors("錯誤");

現在,“addLogInfo”再次有效,但“addLogError”或“addLogWarning”無效。

請幫助了解做錯了什么。

先感謝您!

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM