java - Java - 控制台上的记录器出现问题
问题描述
我正在用 Java 开发 Connect4 游戏,但我遇到了 Logger 问题。我不知道为什么在其他类型的印刷品之间印刷在不同的地方广告。
public void setPlacement(Move lastMove){
Logger.getGlobal().info("Player" + lastMove.getPlayerIndex() + " placed a checker in position : " + lastMove.toString());
display();
}
display() 方法只是打印游戏的网格。这是上述方法的输出:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| - | - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - ago 01, 2019 6:10:24 PM it.unicam.cs.pa.connectFour.GameViewsetPlacement
INFO: Player1 placed a checker in position : column 4, row 5
| - | - | - | - | - | - |
| - | - | - | - | - | - | - |
| - | O | O | O | - | - | - |
| O | X | X | X | - | - | - |
*****************************
有人可以解释一下为什么记录器会这样吗?
解决方案
对有关 System::out 和 System::err 的问题的回答可能会对您有所帮助。具体来说,您的控制台同时显示两个输出流,发送到不同流的消息之间没有顺序保证。
使 Logger 能够写入标准输出流的一种方法是创建您自己的StreamHandler并将您的 Logger 配置为将输入发送到处理程序。您可能还必须禁用父处理程序以避免重复输出。您可能还希望确保将输出主动发送到所需的输出流,如下所示:
Handler h = new StreamHandler(System.out, formatter)
{
public void publish(LogRecord record)
{
if(record == null)
return;
super.publish(record);
super.flush();
}
};
推荐阅读
- docker - 运行 docker build 时,Webpack 构建命令未输出构建目录
- javascript - 菜单不关闭
- assembly - 为什么使用 arm-none-eabi-ld 链接器更改目标文件的顺序会更改可执行行为?
- android - 如何防止用户在不单击android中的选项的情况下关闭系统对话框
- reactjs - 在 React Animation 上,睡眠挂起的次数超过了应有的程度
- go - Golang:尝试删除地图中的项目时编译错误
- bash - 从 curl 调用 GraphQL 端点意外失败
- c# - 调试时如何查看委托的源代码或封装方法?
- c++ - 如何从文件以及 std::cin 中读取行?
- python-3.x - 尝试通过 TF 下载 cifar-10 并获得证书错误