Menu

#134 Log4j classes reloaded by IsolatingClassLoader

closed
5
2014-05-02
2008-11-19
Fei Fan
No

I use Grinder 3.1, GrinderStone 2.0 and PyDev 1.3.22 in Eclipse 3.4.1. I've used log4j in my test project to output running logs. Things go well with normal running. But when I started the test run in debug mode, which will casue the Grinder to run in single process mode. log4j classes seems to be reloaded by net.grinder.util.IsolatingClassLoader. It will cause log4j to fail initializing:
08-11-19 14:27:28 (agent): The Grinder 3.1
08-11-19 14:27:28 (agent): DEBUG MODE: Spawning threads rather than processes
08-11-19 14:27:28 (agent): WARNING grinder.jvm.arguments (-Xmx256m) ignored in single process mode
08-11-19 14:27:28 (agent): worker CN-PC-HZ2110-0 started
08-11-19 14:27:28 (process CN-PC-HZ2110-0): INFO: Starting new GrinderStone Debug process...
08-11-19 14:27:29 (process CN-PC-HZ2110-0): starting threads
08-11-19 14:27:29 (thread 0 run 0): INFO: Start debugging main script...
08-11-19 14:27:29 (thread 0 run 0): INFO: Grinder debugger is started.
log4j:ERROR A "org.apache.log4j.ConsoleAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [net.grinder.util.IsolatingClassLoader@bf32c] whereas object of type
log4j:ERROR "org.apache.log4j.ConsoleAppender" was loaded by [sun.misc.Launcher$AppClassLoader@19821f].
log4j:ERROR Could not instantiate appender named "stdout".
log4j:ERROR A "org.apache.log4j.FileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [net.grinder.util.IsolatingClassLoader@bf32c] whereas object of type
log4j:ERROR "org.apache.log4j.FileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@19821f].

After examing the code of IsolatingClassLoader, it seems the classes other than the shared ones will be reloaded. A walk around is to modify the caller net.grinder.engine.agent.DebugThreadWorker to include "org.apache.log4j.*" in its SHARED_CLASSES set:

private static final String[] SHARED_CLASSES = {
IsolateGrinderProcessRunner.class.getName(),
"org.apache.log4j.*",
};

Discussion

1 2 3 .. 34 > >> (Page 1 of 34)
  • Philip Aston

    Philip Aston - 2008-11-22

    I plan to address this by providing a grinder property that allows you to add additional classes that should be isolated.

     
  • Philip Aston

    Philip Aston - 2008-11-23

    Patch for use with 3.1.

     
  • Philip Aston

    Philip Aston - 2008-11-23

    I've attached a patch jar if you want to try this out. Put the patch first in your CLASSPATH, then set

    grinder.debug.singleprocess.sharedclasses=org.apache.log4j.*

    in your grinder.properties.

     
  • SourceForge Robot

    This Tracker item was closed automatically by the system. It was
    previously set to a Pending status, and the original submitter
    did not respond within 30 days (the time period specified by
    the administrator of this Tracker).

     
1 2 3 .. 34 > >> (Page 1 of 34)

Log in to post a comment.