- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开发了一个 Eclipse 插件,它提供了一个监视 View ,其中包含 org.eclipse.ui.console.MessageConsole
的多个实例,另请参阅
https://wiki.eclipse.org/FAQ_How_do_I_write_to_the_console_from_a_plug-in%3F
为了避免内存问题,我想设置控制台缓冲区的最大大小,类似于 Eclipse 对“普通控制台 View ”的设置:
Limit console output, Console buffer size (characters)
如果超出限制,我希望滚动控制台的内容,以便清除最旧的行并在控制台中显示最新的行。
=>如何设置缓冲区大小限制? MessageConsole
似乎没有提供 setBufferSize(80000)
等方法。它只提供了一个方法clearConsole()
,没有提供确定当前写入文本大小的方法。
是否有另一种 IOConsole 实现可以提供所需的功能?我在包 org.eclipse.ui.console
中找不到类似 RollingMessageConsole
的东西: http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fui%2Fconsole%2Fpackage-summary.html
在哪里可以找到 Eclipse 中用于限制控制台输出的代码?
下面是我的自定义 Log4J 附加程序的当前状态,它将消息写入我的 MessageConsoles
。
package org.treez.core.console;
import java.io.IOException;
import java.io.PrintStream;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.ThrowableInformation;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.treez.core.atom.uisynchronizing.AbstractUiSynchronizingAtom;
import org.treez.core.monitor.TreezMonitor;
/**
* For writing to the eclipse console
*/
public class TreezConsoleAppender extends AppenderSkeleton {
private static final String CONSOLE_NAME = "TreezConsole";
private static MessageConsole treezConsole = null;
@Override
protected void append(LoggingEvent event) {
//get formatted message
Layout layout = this.getLayout();
String message = layout.format(event);
String treezMonitorId = event.getNDC();
MessageConsole console = getConsole(treezMonitorId);
if (console != null) {
AbstractUiSynchronizingAtom.runUiTaskNonBlocking(() -> {
Level level = event.getLevel();
try (
MessageConsoleStream stream = console.newMessageStream();) {
if (level.equals(Level.WARN)) {
stream.setColor(TreezMonitor.ORANGE);
} else if (level.equals(Level.ERROR)) {
stream.setColor(TreezMonitor.RED);
}
stream.println(message);
} catch (IOException exception) {
exception.printStackTrace();
}
ThrowableInformation throwableInformation = event.getThrowableInformation();
if (throwableInformation != null) {
Throwable throwable = throwableInformation.getThrowable();
try (
MessageConsoleStream stream = console.newMessageStream();) {
if (level.equals(Level.WARN)) {
stream.setColor(TreezMonitor.ORANGE);
} else if (level.equals(Level.ERROR)) {
stream.setColor(TreezMonitor.RED);
}
throwable.printStackTrace(new PrintStream(stream));
} catch (IOException exception) {
exception.printStackTrace();
}
}
});
}
}
@Override
public void close() {
//not used here
}
@Override
public boolean requiresLayout() {
return true;
}
/**
* If a non-null jobId is specified: returns the console for the given jobId or null if no corresponding console has
* been registered for the TreezMonitors. If the given jobId is null, the (single) TreezConsole is returned.
*/
private static MessageConsole getConsole(String treezMonitorId) {
if (treezMonitorId == null) {
if (treezConsole == null) {
createTreezConsole();
}
return treezConsole;
} else {
return TreezMonitor.getConsole(treezMonitorId);
}
}
/**
* Creates the console
*/
private static void createTreezConsole() {
IConsoleManager consoleManager = getConsoleManager();
if (consoleManager != null) {
IConsole[] existingConsoles = consoleManager.getConsoles();
//check if console already exists and save it if so
for (IConsole currentConsole : existingConsoles) {
String currentConsoleName = currentConsole.getName();
boolean isWantedConsole = CONSOLE_NAME.equals(currentConsoleName);
if (isWantedConsole) {
treezConsole = (MessageConsole) currentConsole;
return;
}
}
//console does not already exist: create new one
treezConsole = new MessageConsole(CONSOLE_NAME, null);
consoleManager.addConsoles(new IConsole[] { treezConsole });
}
}
/**
* Gets the eclipse console manager
*/
private static IConsoleManager getConsoleManager() {
ConsolePlugin plugin = ConsolePlugin.getDefault();
if (plugin != null) {
IConsoleManager consoleManager = plugin.getConsoleManager();
return consoleManager;
} else {
return null;
}
}
}
最佳答案
使用
设置限制public void setWaterMarks(int low, int high)
IOConsole
的方法(MessageConsole
扩展)。
JavaDoc 说
Sets the text buffer size for this console. The high water mark indicates the maximum number of characters stored in the buffer. The low water mark indicates the number of characters remaining in the buffer when the high water mark is exceeded.
关于java - 如何以编程方式限制 Eclipse (Message)Console 的缓冲区大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48869004/
已经有几个关于捕获或重定向 console.log 的问题: redirect Javascript syntax errors and console.log to somewhere else C
console.log(String(console.log('Not undefined')) === 'undefined'); console.log(String(console.log('N
我知道这是一个新手错误,但我不知道如何修复它。 public static void main (String args[]){ Console kitty = System.console(); S
我正在使用 Visual Studio 2015。 我试图打印一些语句只是为了跟踪一个非常长时间运行的测试。当使用 VSTest.Console 和/Logger:trx 时,调试输出(无论我们使用
这个问题在这里已经有了答案: Accessing console and devtools of extension's background.js (8 个回答) 5年前关闭。 我的 Chrome
我在括号中收到此错误。 我想强调一个事实,这是我第二次打开 JS 文件。 正如我强调的那样,我还想强调一个事实,即我不知道 Eslint 和 node.js 是什么。 StackOverflow 和其
我按照文档中的描述安装了 Drupal Console Launcher: curl https://drupalconsole.com/installer -L -o drupal.phar mv
Console.WriteLine() 和有什么区别和Trace.WriteLine() ? 最佳答案 从“调试”的角度来看这些。 我们开始使用 Console.WriteLine() 进行调试 后来
我一直在尝试连接到 serial console of a Raspberry Pi 3 with Android Things使用USB to TTL cable从我的 Linux (Ubuntu)
namespace Pro { class ErrorLog { public ErrorLog(RenderWindow app) {
以下代码是一个众所周知的示例,用于显示调试版本和发布版本之间的区别: using System; using System.Threading; public static class Program
if (open_date) { open_date = get_date_from_string(open_date); window.console && cons
在 Xcode 中工作时,我通常只为控制台打开一个单独的窗口,以便我可以看到尽可能多的输出行。我今天刚刚更新到 Xcode 12,在更新之前,您可以将编辑器 Pane 和控制台 Pane 之间的分隔线
在 Google Play Console 上,在所有应用程序的第一页,它会显示已安装的受众和用户获取。 我知道已安装的受众是在他们的设备上安装我的应用程序的受众。但什么是用户获取?通常,用户获取的数
Qt Quick uses qDebug执行日志记录,其中标准 Javascript 日志记录方法映射到 Qt 日志类型 console.log() -> qDebug() console.deb
Qt Quick uses qDebug执行日志记录,其中标准 Javascript 日志记录方法映射到 Qt 日志类型 console.log() -> qDebug() console.deb
我有以下代码: bool loop = true; LongbowWorkerThread Worker = new LongbowWorkerThread(); Th
我遇到了这两个 API,用于在 C# 的简单控制台应用程序中读取用户的输入: System.Console.ReadLine() System.Console.In.ReadLine() 这是一个我试
我是编程和 js 的新手,我正在尝试学习 javascript 的关键。 var obj1 = { name: 'rawn', fn: function() { con
using System; namespace ConsoleApplication1 { class Program { static void Main(strin
我是一名优秀的程序员,十分优秀!