I'm looking for a way to automate an arduous mechanical procedure that I perform too often: implementing trace logging on a method.
Consider the following fictitious methods.
private void createBaz(String key, String databaseConfigKey, String query) {
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
this.frobs.put(key, query);
}
Now, I'll add some useful logging.
private void createBaz(String key, String databaseConfigKey, String query) {
this.log.trace("createBaz(" + key + ", " + databaseConfigKey + ", " + query + ")");
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
this.log.trace("createFrob(" + key + ", " + hostname + ")");
this.frobs.put(key, query);
}
Note the similarities of the two log.trace calls.
I've typed out a lot of log lines like that, and I'm tired of it. I'm looking for something like this:
private void createBaz(String key, String databaseConfigKey, String query) {
doLogTrace();
this.queries.put(key, query);
this.databases.put(key, Database.forKey(databaseConfigKey));
}
private void createFrob(String key, String hostname) {
doLogTrace();
this.frobs.put(key, query);
}
I might need help refining my question!
It doesn't matter to me if doLogTrace();
happens to be a longer string like doLogTrace(this,System.foo(),#$^#$&^$#);
. It could even be multiple lines, so long as it's the SAME string wherever I use it. Then I could just put that string in a keyboard macro.
Things I've considered
AspectJNot for this project.- IDE magic. I could probably write a macro for emacs that could jump to the top of the method, copy the name and parameter list, drop one line down, paste it and automagically edit it into
log.trace("<methodName>(" + <method1> + ["," + <methodN>] +")");
... But, normally my .java files are only open in Eclipse... :/