Похоже, я смог сделать это, написав собственный файл Agent.jar с простым кодом
import java.io.File;
import java.io.PrintStream;
import java.lang.instrument.Instrumentation;
public class Agent {
public static void premain(String args, Instrumentation instrumentation) {
}
public static void agentmain(String agentArgs) {
try {
PrintStream psout =new PrintStream(new File("C:\\LOG\\out.txt"));
PrintStream pserr =new PrintStream(new File("C:\\LOG\\err.txt"));
System.setOut(psout);
System.setErr(pserr);
} catch (Exception e) {
e.printStackTrace();
}
}
}
с предварительно созданными файлами.Я сделал это как jar со строкой класса агента в MANIFEST.MF, затем «закачал» в работающую виртуальную машину так же просто, как
public class TestAttachJVM {
public static void main(String s[]) throws Exception {
VirtualMachine vm = VirtualMachine.attach("<PID>");
try {
// load agent into target VM
String agent = "c:\\DIR\\agent.jar";
vm.loadAgent(agent);
} finally {
// detach
vm.detach();
}
}
}
, затем я закончил выполнение этой простой программы, out.txt и err.TXT заблокирован.к сожалению, я не вижу немедленного вывода, так как программа, которую я пытаюсь подключить, делает вывод каждые 1-4 часа.Я проверю это позже.