Benutzer:Krogmann/TestMeasuring Logging
Java-based logging infrastructure for distributed monitoring of control and data flow of Java applications.
Logging
svn://141.3.52.13/stud/KlausKrogmann/Dissertation/code/workspace/TestMeasuring
Requirements
- Running MySQL Server (5.0)
- Default Settings (config/sqlsetup.properties)
- Database running: jdbc:mysql://localhost/test
- UserName=root
- Password=root
- Change my.ini file of MySQL Server and add (relates to the de.uka.ipd.sdq.logger.sql.MaxInsertStringSize property):
- max_allowed_packet = 10M
- Default Settings (config/sqlsetup.properties)
- Option to modify access policies (set server.policy)
Setup
- Start RMI registry (rmiregstart.cmd)
- The source code path specified must not contain whitespaces!
- Start MySQL/DB
- Start Master process/Log Server (de.uka.ipd.sdq.logger.rmi.RmiLogServer.main(..))
- Start sensor processes (n times) / the measuring process itself
- Start AnalysisStarter to aggregate data
Instrumentation
place in classpath:
- TestMeasuring.jar
- rmi-logger.properties
- server.policy
- log4j-1.2.14.jar
- mysql-connector-java-5.1.6-bin.jar
- make the config folder available (copy into the application folder)
RMI
- activate right security policies: -Djava.security.policy=server.policy
- see also Oracle Weblogic Server and RMI
Example policy file granting all permissions (de.uka.ipd.sdq.logger/server.policy):
grant { permission java.security.AllPermission; };
Code
class header:
// KK-Log: import de.uka.ipd.sdq.logger.Log; import de.uka.ipd.sdq.logger.LogFilter; import de.uka.ipd.sdq.logger.LogPrinterFactory; import de.uka.ipd.sdq.logger.Logger; import de.uka.ipd.sdq.logger.enums.LogEntryItemType; import de.uka.ipd.sdq.logger.enums.LogType;
or
// KK-Log: import de.uka.ipd.sdq.logger.*;
class init:
// KK-Log: private Logger myLogger = Log.getRmiLogger("sorter", this.getClass().getName());
convenient (slow) in-method-logging:
// KK-Log: myLogger.setAutomaticLogLineAndMethodMode(true); myLogger.newMethodInvocation(); //at the beginning of each method invocation myLogger.addLogEntryData(LogType.MethodCall, LogDataType.ParameterValue, "obj.getItemCount", obj.getItemCount()); //logging instruction itself ..
fast in-method-logging (requires more parameters):
// KK-Log: myLogger.newMethodInvocation(); //at the beginning of each method invocation myLogger.addLogEntry( /* logging instruction itself */ LogType.InIteratorStatement, /* LogType: Enum with different "places" of logger statements */ "public int doSth(int, double) ", /* full method name like return vom Method.getName() */ 26, /* code line in the source code */ LogDataType.Timestamp, /* Data types enum */ "myObject", /* identifying name; e.g. the argument name */ myObject, /* the value object itself */ "NoComment"); /* optional comment */ ..
Example
Example code for fast logging:
private de.uka.ipd.sdq.logger.Logger sdqLogger = LoggerFactory.createLogger("MyClass", "MyClass"); public int doSth(int c, double d) { sdqLogger.newMethodInvocation(); sdqLogger.addLogEntry(LogType.MethodCall, "public int doSth(int, double) ", 15, LogDataType.ParameterValue, "d", d + "", "NoComment"); sdqLogger.addLogEntry(LogType.MethodCall, "public int doSth(int, double) ", 15, LogDataType.ParameterValue, "c", c, "NoComment"); extClass = new ExternalClass(); int a = 0; for(int x = 0; x < c; x++) { sdqLogger.addLogEntry(LogType.InIteratorStatement, "public int doSth(int, double) ", 16, LogDataType.Timestamp, "", d, "NoComment"); sdqLogger.addLogEntry(LogType.BeforeExternalAction, "public int extCallDependentReturn(int) ", 17, LogDataType.ParameterValue, "x", x, "NoComment"); a = extClass.extCallDependentReturn(x); .. } .. }
Troubleshooting
My application uses RMI and does not work together with the logging framework; the JNDI lookup of my application classes fails.
- Check RMI ports. RMI ports should not overlap
- Check whether there is jndi.properties in TestMeasuring.jar; remove if present.