如何将JAVA日志器打印输出显示在C#控制台上

3
我正在尝试将从JAVA控制台打印的信息显示到C#中。当使用System.out.println在JAVA中输出时,它能正常工作,但是使用logger.info输出无效。
注意:当我在Windows命令提示符(CMD> java -jar testbed.jar)中运行它时,记录器信息会被打印出来。
感谢您对此提供任何意见和帮助。以下是我正在操作的一个简单递增和递减数字的测试代码,并且当按下按钮进行递增或递减时会通过日志打印出来。(无法更改此代码)
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);
        }
    }

将一个控制台附加器添加到记录器。 - srkavin
我无法更改JAVA代码。我只在C#代码上工作。我会把这个问题添加到我的问题列表中。 - Tai Zhi Ling
1个回答

0

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

尝试将RedirectStandardError属性设置为true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接