gpt4 book ai didi

java - Log4j 如何阻止记录器打印到控制台?

转载 作者:太空宇宙 更新时间:2023-11-04 09:54:23 26 4
gpt4 key购买 nike

好吧,我正在尝试制作一个内存附加程序(只是一个记录器,记录到 ArrayList 而不是控制台或文件),但现在我想禁用它打印到控制台。

到目前为止我已经阅读过的问题和网站(但我仍然无法弄清楚是)..

它包含了我想要实现的目标的所有部分,但我仍然有点困惑。

我还从 Logback or Log4j Additivity Explained 读到了这一段哪个州..

If the aditivity flag of logger X however is set to false, or disabled, then calling x.debug() will only log to the file.

理论上我的 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;
}
}

但事实并非如此...

appender
(来源: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 等包部分。

<小时/>

看来你在这里混合了很多东西。 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.propertieslog4j.jar 以及您自己的类一起位于您的类路径中。

你会看到这个:

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

从这里您可以尝试添加文件附加器或您自己的内存附加器。

关于java - Log4j 如何阻止记录器打印到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54360570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com