- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
任何人都可以解释一下 ProcessBuilder
和 FileHandler
之间的区别,在哪种情况下应该使用哪一个。
例如,如果我们要将命令的输出重定向到文本文件,例如“logfile.txt”,ProcessBuilder
需要几秒钟的时间才能将输出发送到文件。
在 100 个进程必须将其输出发送到同一个“logfile.txt”的情况下,这个 FileHandler
能做什么?
有没有一种方法可以将所有一百条记录输出到相同的“logfile.txt”,而不使用ProcessBuilder<中的
?这是我的代码,但如果同时安排 100 条记录,那么 p.waitfor() 方法将无法帮助我,因为执行命令并将输出输出到每个进程的日志文件需要几秒钟,对于 100 个进程意味着需要更多时间对数据库中的所有记录执行相同命令的时间。但我的应用程序每分钟都会启动。这就是问题所在, process.waitFor() 帮助我获得准确的输出,但对于更多数量的记录意味着需要更多时间。我想要另一种方法,它不应该等待,但所有输出都应该同步附加到文件中。process.waitFor()
方法
while(rs1.next())
{
instance_id = rs1.getString(1);
startdate = rs1.getString(2);
starttime = rs1.getString(3);
endtime = rs1.getString(4);
enddate = rs1.getString(5);
if(presentdate.equals(startdate) || presentdate.equals(enddate))
{
if(presenttime.equals(starttime))
{
String[] s1 = new String[]{"cmd", "/c","ec2-start-instances",instance_id,">>","D:\\logfile.log"};
ProcessBuilder builder1 = new ProcessBuilder(s1);
Process p1 = builder1.start();
p1.waitFor();
}
else if(presenttime.equals(endtime))
{
String[] s1 = new String[]{"cmd", "/c","ec2-stop-instances",instance_id,">>","D:\\logfile.log"};
ProcessBuilder builder1 = new ProcessBuilder(s1);
Process p1 = builder1.start();
p1.waitFor();
}
}
}
最佳答案
它们是两个几乎不相关的对象和区域。
是的,进程生成器为我们提供了标准输出和错误输出流,可以将其保存到文件中,但也可以将其保存到数据库中或丢弃。
另一方面,ava.util.logging.FileHandler 是日志系统的附加部分。我们通常对自己的代码使用日志记录,尽管记录我们在那里调用的外部进程的输出也没有什么问题。但是如果其他类在进程日志记录时进行日志记录,那么将会得到混合日志。
同样,如果您正在运行 50 个进程,我建议您不要登录到同一个文件。但使用 50 个线程记录 50 个不同的文件。每个线程都会检查错误和输出流,并在有新行或该流末尾时保存。
完成所有操作后,可以根据需要复制到日志文件或新文件。T
关于java - ProcessBuilder 和 FileHandler 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264659/
我尝试添加、删除 FileHandler,但不起作用。此外,在现有 FileHandler 中更改 (URL) 后,该 url 仍然指向旧 URL。现有的 FileHandler 工作正常,但没有选择
我正在尝试禁用日志轮转,以供文件处理程序使用, FileHandler fh = new FileHandler ( "path" + "run.log", 1000000, 1, false
我了解当达到特定大小时 Java FileHandler 如何滚动到下一个日志文件。我想要的有点不同。我想使用 FileHandler 在程序启动时使用序列中最后写入时间最早的日志文件。 例如,如果我
我正在使用jdk日志记录,并且我在logging.properties中有以下内容: handlers= java.util.logging.FileHandler .level= INFO java
我想在线程完成或强制完成后关闭所有 FileHandler。 我创建了一个 closeLogger 函数,但它似乎没有被调用 因为我看到文件仍然锁定在文件夹中。 有什么问题? 在eclipse中强行终
我有以下代码: func syncShellExec(path: String, args: [String] = []) { let process = Process
我正在尝试使用 fs.open 和 FileHandle 在 Node 中逐字节读取二进制文件。使用 FileHandle.read(buffer, offset, length, position)
我正在使用 Python 日志记录包,我需要记录两种类型的消息: 仅应登录到标准输出的消息 应该只记录到文件中的消息。 但是我无法实现它。这是我的代码: import logging
假设我有一个 4GB 的文件需要处理,在 Perl 中有没有一种方法可以像数组一样引用文件句柄,而无需将其复制到实际的数组/内存中? 类似于: open (LOG, "less file.txt |"
我需要为 websphere 应用程序服务器 9 上安装和运行的每个应用程序生成一个日志文件。我使用 JUL 来生成日志文件。我的解决方案是创建一个继承自 FileHandler 的特定类,并通过配置
我有一个看起来像这样的代码: let fileName = "name.txt" let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).
我部署了一个servlet。我对生成的日志文件有点困惑。特别是我不知道该看哪一个。 使用相同的数据生成了多个。 我正在使用以下代码来初始化我的文件处理程序。 Logger logger = Logge
我不明白为什么 tell() 函数在这种情况下不起作用。让我们创建一个包含字符串“1\n2\n3\n4\n”的文件: f=open('test.tmp','w') f.write('1\n2\n3\n
我有一个日志配置文件: logger_config.yml version: 1 formatters: simple: format: '%(asctime)s - %(levelnam
我正在尝试将所有过度使用的打印更改为日志记录。*主要是因为我想要一个日志文件。 logger = logging.getLogger(__name__) formatter = logging.For
Java 日志记录配置文件让我可以定义命名记录器的属性,例如 name.heikoseeberger.heikotron.level = FINE name.heikoseeberger.heikot
我正在创建一个允许循环访问文件的 java.util.logging.FileHandler。当我的应用程序的多个实例运行时,将为应用程序的每个实例创建一个新的日志文件。我需要知道应用程序正在使用什么
我正在考虑使用 Java 日志记录和 FileHandler 在 J2EE 网络应用程序中记录业务事件。 我想知道这是否会导致性能瓶颈,因为许多日志记录将写入一个文件。 您的经验和意见是什么? 使用
我正在尝试使用 Pipe的 fileHandleForReading的 readabilityHandler阅读 standardOutput和 standardError的 Process .然而,
我正在尝试在多处理服务器中实现日志记录。根据文档,“不支持从多个进程记录到单个文件”。我创建了一个小程序来检查这个语句: import logging import multiprocessing i
我是一名优秀的程序员,十分优秀!