当前位置: 首页 > 知识库问答 >
问题:

如何将JAVA记录器打印到C#控制台

司徒鸿文
2023-03-14

我试图将命令提示符中打印出来的信息从JAVA控制台显示到C#。当在JAVA中发出System.out.println时,它可以很好地工作,但是它不能用于logger.info print out。

注意:当我通过windows命令提示符(CMD>java-jar testbed.jar)运行它时,记录器信息会在命令提示符中打印出来。

JAVA来做一个简单的增量和减量数字,当按下按钮进行增量或减量时,通过记录器打印出来。(此代码不能更改)

private static int ValueInteger = 0 ;
static Logger l;

public TestBed() {
        initComponents();
        try{
            l = Logger.getLogger("");
            FileHandler fh = new FileHandler("main.log", false);
            l.addHandler(fh);
            l.setLevel(Level.ALL);
            l.fine("Logger Created - JTSRunner.main()");
        }catch(Exception ex){}
    }
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        ValueInteger--;         
//        System.out.println(Integer.toString(ValueInteger));
        l.info(Integer.toString(ValueInteger));
    } 

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        ValueInteger++; 
//        System.out.println(Integer.toString(ValueInteger));
        l.info(Integer.toString(ValueInteger));
    }

处理并打印到文本框上的C#代码(我正在处理的代码):

private void Button_Click(object sender, RoutedEventArgs e)
    {

        ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/k java -jar Testbed.jar ")
        {
            WorkingDirectory = "C:\\Testbed",
            WindowStyle = ProcessWindowStyle.Hidden,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };

        Process process = Process.Start(startInfo);
        process.OutputDataReceived += writeCommandInfo;
        process.BeginOutputReadLine();           
        //process.WaitForExit();
    }

    private void writeCommandInfo(object sender, DataReceivedEventArgs e)
    {
        if (e.Data != null)
        {
            this.Text.Dispatcher.Invoke(new Action(() => this.Text.Text = e.Data.ToString()), DispatcherPriority.Normal, null);
        }
    }

共有1个答案

劳星晖
2023-03-14

默认的java.util.logging属性文件配置ConsoleHandler,它将消息记录到System.err(源代码),这就是为什么消息出现在命令提示符中。但是,由于您的C#代码只重定向标准输出,而不重定向标准错误(RedirectStandardError),因此进程无法捕获消息。

尝试将RedirectStandardError属性设置为true。

 类似资料:
  • 好的,所以我试图使内存appender(简单的记录器,日志到ArrayList而不是控制台或文件),但现在我想禁用它从打印到控制台。 问题和网站,到目前为止我已经读过了(但我仍然不知道它是什么)。。 StackOverFlow问题log4j:将特定类的输出记录到特定附加器 它包含了我想要实现的所有部分,但我仍然有点困惑。 我也读了这段Logback或Log4j附加解释的状态... 但是,如果log

  • 问题内容: 我的C程序粘贴在下面。在bash中,程序打印“ char is”,不打印Ω。我的语言环境均为en_US.utf8。 问题答案: 这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。 首先:-format说明符期望一个(即使在wprintf -version 中也是如此),因此您必须指定(并因此指定字符串)。 其次,如果您像这样将语言环境设

  • 这是@MatthewD的问题“如何写入Netbeans调试器控制台(Java)”的后续问题 对于NetBeans断点,可以分别使用、和打印行号、类名和线程名。方法名称是否也有类似的表达式? 我测试了和,搜索了NetBeans JPDA API和NetBeans Wiki,但没有找到任何结果。我宁愿在断点的属性中编写,而不是名称本身,因为名称不能被复制粘贴或用作模板。

  • 我试图使用TDD(测试驱动开发)与。当我使用时,不会到控制台。 我正在使用来运行它。 似乎说默认情况下它应该工作:http://pytest.org/latest/capture.html 但是: 没有任何东西被打印到我的标准输出控制台(只是正常的进度和多少测试通过/失败)。 我正在测试的脚本包含打印: 在模块中,默认情况下打印所有内容,这正是我所需要的。但是,出于其他原因,我希望使用。 有人知道

  • 我们可以dsable日志打印一些自定义创建记录器吗? 我想禁用文件记录器控制台中的打印消息

  • 问题语句:我有一个在Xcode中运行的程序,它有一堆print()语句,可以很好地将输出打印到调试控制台。然而,我希望也能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我,作为调试的一种方式。 SO上找到的解决方案使我可以将输出重定向到文件,但调试控制台输出将丢失。 问:我想要我的蛋糕和吃它。我希望能够将print()语句重定向到调试控制台和文件。 所以我有引用:https://st