- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将日志重定向到 TextArea
?我试过这样获取日志信息:
@Override
public void initialize(URL arg0, ResourceBundle arg1)
{
_Game.setText(getGSTextLog());
}
public void setGSTextLog(String text)
{
_gstext = text;
}
public String getGSTextLog()
{
return _gstext;
}
public void GameSteam() throws UnsupportedEncodingException
{
Logger logger = Logger.getLogger("test.test");
logger.setUseParentHandlers(false);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
StreamHandler sh = new StreamHandler(baos, new SimpleFormatter());
sh.setLevel(Level.ALL);
logger.addHandler(sh);
logger.severe("Console Test");
sh.flush();
int b = 0;
if (b == '\r')
{
return;
}
if (b == '\n')
{
final String text = baos.toString("UTF-8");
baos.reset();
Platform.runLater(() -> setGSTextLog(text + "\n"));
return;
}
baos.write(b);
}
最佳答案
直接实现Handler
即可:
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class LogToTextArea extends Application {
@Override
public void start(Stage primaryStage) {
Logger logger = Logger.getLogger("test.test");
logger.setUseParentHandlers(false);
TextArea log = new TextArea();
log.setEditable(false);
Formatter formatter = new SimpleFormatter();
logger.addHandler(new Handler() {
@Override
public void publish(LogRecord record) {
Platform.runLater(() -> log.appendText(formatter.format(record)));
}
@Override
public void flush() {}
@Override
public void close() {}
});
TextField sendToLog = new TextField();
sendToLog.setOnAction(e -> {
logger.info(sendToLog.getText());
sendToLog.setText("");
});
BorderPane root = new BorderPane(log, sendToLog, null, null, null);
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果您真的很想使用 StreamHandler
,需要注意的一个问题是 StreamHandler
将其 OutputStream
包装在一个OutputStreamWriter
,它添加了缓冲。因此,您可能希望确保处理程序在每条日志消息上刷新缓冲区。像这样的东西:
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import java.util.logging.StreamHandler;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class LogToTextArea extends Application {
@Override
public void start(Stage primaryStage) {
Logger logger = Logger.getLogger("test.test");
logger.setUseParentHandlers(false);
TextArea log = new TextArea();
log.setEditable(false);
Formatter formatter = new SimpleFormatter();
StreamHandler handler = new StreamHandler(new OutputStream() {
@Override
public void write(int b) throws IOException {
String s = String.valueOf((char)b);
log.appendText(s);
}
}, formatter){
// flush on each publish:
@Override
public void publish(LogRecord record) {
super.publish(record);
flush();
}
};
logger.addHandler(handler);
TextField sendToLog = new TextField();
sendToLog.setOnAction(e -> {
logger.info(sendToLog.getText());
sendToLog.setText("");
});
BorderPane root = new BorderPane(log, sendToLog, null, null, null);
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFx 和 StreamHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927212/
如何将日志重定向到 TextArea?我试过这样获取日志信息: @Override public void initialize(URL arg0, ResourceBundle arg1) {
我有一个 CLI 脚本,它将所有进程记录到一个日志文件中。CLI 的功能之一是通过以下方式上传大文件将其分成几部分并并行上传。在 linux 中,整个过程就像一个魅力,但在 windows 我似乎无法
我有一个非常简单的结构。但我的两个日志处理程序中只有一个正在从我的模块进行日志记录: 程序.py,支持模块1.py,support_module2.py #program.py import supp
我试图在 python 代码执行的运行时删除 StreamHandler。 if (False == consoleOutput):
我正在编写一个 GeoFire 插件,我试图让 Dart 代码中的查询监听器可用,但没有成功。我似乎无法弄清楚如何为 EventChannel 设置 StreamHandler。要了解我的挣扎,您需要
我不知道如何将信息级消息记录到标准输出,但其他所有信息都记录到标准错误。我已经读过这篇 http://docs.python.org/library/logging.html .有什么建议吗? 最佳答
我想使用 python 的 StreamHandler 日志处理程序。我试过的是, import logging import sys mylogger = logging.getLogger("my
我将我的 Python 代码从 Win10 主机迁移到 WS2012R2。令人惊讶的是,它停止正常运行,现在显示警告消息:“UnicodeEncodeError:‘charmap’编解码器无法对位置
我使用多个处理程序,例如 rootLogger = logging.getLogger() rootLogger.basicConfig(filename = logfile, level=loggi
我一直在寻找一个很好的例子来将进程输出和错误流写入日志文件。我使用 apache-commons exec 库来执行我的进程。按照代码示例进行演示 public static int executeC
我有如下设置日志记录: def setUp(): LOG_FORMAT = '%(asctime)s %(levelname)-8s %(name)s %(message)s' #LO
我正在尝试为我的日志文件和流设置不同的记录器级别,并且我(似乎)遵循了演示(https://docs.python.org/3/howto/logging-cookbook.html)到点。但是,在我
重定向正常日志记录的输出工作正常: import contextlib import io import logging std_out_capture = io.StringIO() with co
使用单个 StreamHandler 是否安全?在多处理环境中? 更准确地说,只有一个 StreamHandler 可以简单地将所有进程的日志记录打印到 stdout 吗?像这样,例如: import
我不知道为什么它无法记录该消息,我认为一切都已正确设置。 logging.DEBUG 定义在 logging 模块下 import logging import sys logger = loggin
假设我有如下脚本,我无法编辑它: import logging logger = logging.getLogger('simple_example') logger.setLevel(logging
我有一个普通的 python(非 Django)项目,我正在尝试 tie Raven into the logging setup . 在我们当前的设置下,我们使用一个简单的日志配置: import
我的 Python 应用程序中有一个 RotatingFileHandler 和 StreamHandler 。这是在 docker 容器中的 apache 服务器中运行的。因此,我将 apache
我在基本配置中设置了两个日志处理程序。 FileHandler 记录到文件,StreamHandler 记录到标准输出。 logging.basicConfig( format="%(asct
python 模块 paramiko 抛出一个奇怪的异常,如磁贴上所示。最后我找到了它真正出现的位置,它在模块 logging 中。当我使用 pydev 在 Eclipse 中的行上设置断点,并将行放
我是一名优秀的程序员,十分优秀!