簡體   English   中英

Log4j 如何阻止我的記錄器打印到控制台?

[英]Log4j How do I stop my logger from printing to the console?

好的,所以我正在嘗試制作一個內存追加器(只是一個記錄器,它記錄到 ArrayList 而不是控制台或文件),但現在我想禁用它打印到控制台。

到目前為止,我已經閱讀了這些問題和網站(但我仍然無法弄清楚是)。

它包含我想要實現的所有部分,但我仍然有點困惑。

我還從Logback 或 Log4j Additivity Explained 中閱讀了這一部分,其中說明了..

如果 logger X 的 aditivity 標志設置為 false 或禁用,則調用 x.debug() 只會記錄到文件。

所以理論上我的log4j.properties文件

log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %5p %c (%F:%L) - %m%n
#hide the Log4jMemoryAppender from console
log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender= ERROR, MEMORY_APPENDER
log4j.appender.MEMORY_APPENDER=nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender.Log4jMemoryAppender
log4j.additivity.rootLogger = false
log4j.additivity.console = false
log4j.additivity.MEMORY_APPENDER=false

應該只打印***Hello World並從MEMORY_APPENDERrootLoggerconsole排除任何其他內容。

package nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender;

import java.util.ArrayList;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Log4jMemoryAppender extends AppenderSkeleton {

ArrayList<LoggingEvent> eventsList = new ArrayList();

public static void main (String [] args) {

    PropertyConfigurator.configure("Lib/log4j.properties");
    Log4jMemoryAppender app = new Log4jMemoryAppender();
    Logger logger = Logger.getLogger(Log4jMemoryAppender.class);
    logger.setLevel(Level.INFO);

    logger.addAppender(app);
    logger.info("Hello World");
    logger.debug("Level DEBUG Is SET");

    for (LoggingEvent le: app.eventsList) {
        System.out.println("***" + le.getMessage());
    }
} 

@Override
protected void append(LoggingEvent event) {
    eventsList.add(event);
}

public void close() {
}

public boolean requiresLayout() {
    return false;
}
}

但它不...

附加程序
(來源: iforce.co.nz

MEMORY_APPENDER=false

將不起作用,您不能將附加程序設置為具有 false 值。

在你的情況下最好做這樣的事情:

log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.logger.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = ERROR, MEMORY_APPENDER
log4j.additivity.nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender = false

在您的示例之一中使用的記錄器是nz.ac.massey.cs.sdc.log4jassignment.s06005586.MemoryAppender ,它應該映射到log4j.properties的記錄器或只是像nz.ac.massey.cs.sdc.log4jassignment這樣的包部分nz.ac.massey.cs.sdc.log4jassignment


看起來你在這里混了很多。 Log4jMemoryAppender是否是您的MEMORY_APPENDER

為什么要調用BasicConfigurator.configure() 你不想使用log4j.properties嗎?


通常在課堂上你這樣做是為了得到一個記錄器:

package com.mycompany;

public class MyClass {
    private static final Logger log = Logger.getLogger(MyClass.class);
    ...
}

記錄器名稱將是完全限定的類名com.mycompany.MyClass

然后你可以有一個像這樣的log4j.properties

log4j.rootLogger=ERROR, console
log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.logger.com.mycompany=INFO, file
log4j.additivity.com.mycompany=false

logfj.appender.file = <some file appender>

好的,從頭開始。 一個非常簡單的例子。

src/main/java/Log4JTest.java

package org.stackoverflow;

import org.apache.log4j.Logger;

/**
 * @author maba, 2012-08-22
 */
public class Log4JTest {

    public static final Logger log = Logger.getLogger(Log4JTest.class);

    public static void main(String[] args) {
        log.error("Error in main");
    }
}

src/main/resources/log4j.properties

log4j.rootLogger = ERROR, console

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

現在編譯並確保log4j.properties在運行時與log4j.jar和您自己的類一起在您的類路徑中。

你會看到這個:

0    [main] ERROR org.stackoverflow.Log4JTest  - Error in main

從這里您可以嘗試添加文件附加程序或您自己的內存附加程序。

我剛剛通過在 log4j.xml 中設置它來解決這個問題,將 value="TRACE" 替換為 value="ERROR"。 希望這可以幫助某人:)

    <root>
        <priority value="ERROR" />
        <appender-ref ref="STDOUT"/>
    </root>

暫無
暫無

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

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