嗨,我正在尝试在我的应用程序中实现Java日志记录。我想使用两个处理程序。文件处理程序和我自己的控制台处理程序。我的两个处理程序都工作正常。我的日志记录发送到文件和控制台。我的日志记录也发送到我不想要的默认控制台处理程序。如果运行我的代码,您会看到发送到控制台的另外两行。我不想使用默认的控制台处理程序。有谁知道如何禁用默认控制台处理程序。我只想使用我创建的两个处理程序。
Handler fh = new FileHandler("test.txt");
fh.setFormatter(formatter);
logger.addHandler(fh);
Handler ch = new ConsoleHandler();
ch.setFormatter(formatter);
logger.addHandler(ch);
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class LoggingExample {
private static Logger logger = Logger.getLogger("test");
static {
try {
logger.setLevel(Level.INFO);
Formatter formatter = new Formatter() {
@Override
public String format(LogRecord arg0) {
StringBuilder b = new StringBuilder();
b.append(new Date());
b.append(" ");
b.append(arg0.getSourceClassName());
b.append(" ");
b.append(arg0.getSourceMethodName());
b.append(" ");
b.append(arg0.getLevel());
b.append(" ");
b.append(arg0.getMessage());
b.append(System.getProperty("line.separator"));
return b.toString();
}
};
Handler fh = new FileHandler("test.txt");
fh.setFormatter(formatter);
logger.addHandler(fh);
Handler ch = new ConsoleHandler();
ch.setFormatter(formatter);
logger.addHandler(ch);
LogManager lm = LogManager.getLogManager();
lm.addLogger(logger);
} catch (Throwable e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
logger.info("why does my test application use the standard console logger ?\n" + " I want only my console handler (Handler ch)\n " + "how can i turn the standard logger to the console off. ??");
}
}
默认控制台处理程序附加到根记录器,该记录器是所有其他记录器(包括您的记录器)的父级。因此,我看到了两种解决您的问题的方法:
如果这仅影响您的特定类别,则最简单的解决方案是禁用将日志传递给父记录器:
logger.setUseParentHandlers(false);
如果要为整个应用程序更改此行为,则可以在添加自己的处理程序之前,从根记录器中完全删除默认控制台处理程序:
Logger globalLogger = Logger.getLogger("global");
Handler[] handlers = globalLogger.getHandlers();
for(Handler handler : handlers) {
globalLogger.removeHandler(handler);
}
注意:如果您也想在其他类中使用相同的日志处理程序,则最好的方法是从长远来看将日志配置移到配置文件中。
我正在寻找一种禁用log4j日志控制台的方法。我在网上找到了一些解决方案,但都没用: 禁用log4j控制台日志记录并启用文件日志记录 禁用Java中的Log4J输出 log4j.properties为: 有没有简单的方法将log4j禁用到文件中?
无需创建特定的配置。因为我使用而不必亲自配置日志记录。
我需要禁用我的web应用程序控制台中的应用程序日志。下面的logback-spring.xml强制spring使用文件appender而不是控制台appender。然而,现在的问题是,我的应用程序日志是用来自所有包的所有日志编写的,甚至是来自那些在logback-spring.xml中没有指定的包的日志 我使用的是spring Boot1.5.2。我使用logging.file键在applicat
如何禁用应用程序中出现的窗口,并在生产模式下仅打开浏览器控制台? 是我们必须禁用ConsoleHandler吗?或者在生产模式下我必须使用SimpleRemoteLogHandler? 还有一个FirebugLogHandler,但仅限于Firebug。
问题内容: 我正在尝试禁用的日志输出。 在加载驱动程序之前,我曾尝试在应用程序的开头设置这些设置,但没有帮助。 我收到这种日志: 所以我的控制台完全塞满了mongo日志,我什么也看不到。 问题答案: 所以这解决了这个问题: 如果您希望隐藏所有日志,可以将其设置为较高的值。
问题内容: 我有一些使用该软件包的工具化代码。现在该关闭日志记录了,我无法确定如何关闭标准记录器。 我错过了什么吗?我应该在进行日志调用之前检查标志,还是在生产中将其注释掉? 问题答案: 要完全禁用日志,最好调用Joril并将输出设置为无操作(例如) 但即使在此之后,操作仍将闲置约500-600 ns / op 1 这仍然可切断短路(左右 为100 ns / OP )通过使用自定义的实现,并实现所