【问题标题】:Log inputstream日志输入流
【发布时间】:2012-11-19 16:18:58
【问题描述】:

您是否知道任何将 InputStream 记录到文件中的巧妙解决方案。来自 Process 的 InputStream 永远不会结束并不时生成一些流。 谢谢 巴特克

【问题讨论】:

  • 你能具体点吗?您是否尝试写入日志文件以在发生错误时存储信息?如果可以,请提供有关该项目的一些背景信息。
  • 您在寻找类似 Apache log4j 的东西吗?它是一个库,允许您将数据从应用程序写入日志文件。更多细节在这里:logging.apache.org/log4j/1.2
  • 您是否要在文件中记录 STDOUT 和 STDIN?
  • 最糟糕的方法是以某种方式使用 log4j :) 有一个简单的 bash 脚本会定期在屏幕上打印出一些东西,比如说每 5 分钟一个日期+时间,过程永远不会结束。由Process p = Runtime.getRuntime().exec(command) 午餐,然后来自该进程的 InputStream 需要存储到文件中
  • 从 1.7 开始,如果您使用 ProcessBuilder,您可以使用 ProcessBuilder().inheritIO() 轻松重定向 IO 流。 see this question

标签: java logging inputstream


【解决方案1】:

如果您想透明地记录永无止境的流 - 我相信您需要一个 Tee 过滤器 - 请参阅此 question 中的答案。例如。你可以使用 Commons IO。

【讨论】:

    【解决方案2】:

    对你来说最合适的情况是log4j。

    但是您可以将System.err 和System.out 重定向到控制台或其他类似的东西,它会将所有错误写入特定流中。

    更新:

    # Root logger option log4j.rootLogger=INFO, file, stdout  
    # Direct log messages to a log file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=C:\\loging.log log4j.appender.file.MaxFileSize=1MB log4j.appender.file.MaxBackupIndex=1 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L
    - %m%n  
    # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    

    【讨论】:

    • 您有什么建议如何使用 log4j 将 InputStream 重定向到文件中?
    • 好的,这里是 system.out 重定向但如何重定向不同的 InputStream(例如 Process),可以通过编程方式。
    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2016-03-01
    • 2019-11-19
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多