Further to my post of May 2007, where I described how to create a trace log in DB/Text and handle exceptions, here is a method that is handy for building more complex log statements.
1: // construct formatted log statement
2: function logFormat(val, arg1, arg2, arg3)
3: {
4: var formattedVal = val;
5: if (arg1 != null) {
6: formattedVal = formattedVal.replace("{0}", arg1);
7: }
8: if (arg2 != null) {
9: formattedVal = formattedVal.replace("{1}", arg2);
10: }
11: if (arg3 != null) {
12: formattedVal = formattedVal.replace("{2}", arg3);
13: }
14: log(formattedVal);
15: }
16:
17: // write log statement to form box
18: function log(val)
19: {
20: var box = Form.boxes("boxDebugLog");
21: if (box == null)
22: return;
23:
24: if (box.content != '')
25: {
26: box.content += "\n";
27: }
28: box.content += val;
29: }
Overview
logFormat takes a string value and up to 3 arguments, and replaces tokens found in the string value with those arguments. It's based on C#'s string.Format method, and others like it.
Example
It's easier to read (and write) a format string that contains tokens than a string concatenated together with plus signs.
1: var count = 10;
2: var name = "Peter";
3: var duration = 30;
4:
5: function LogTheOldWay()
6: {
7: log(name + " was lashed with a wet noodle " + count + " times for " + duration + " seconds.");
8: }
9:
10: function LogTheNewWay()
11: {
12: logFormat("{0} was lashed with a wet noodle {1} times for {2} seconds.", name, count, duration);
13: }
Update
My example above only proves how piddly my skills really are. There's a *much* better way of doing this that allows for n arguments instead of a maximum of three. I had forgotten that every javascript function has a local property called arguments that contains all parameters passed to the function as an array.
1: function logFormat(val)
2: {
3: var formattedVal = val;
4: for(i = 1; i < arguments.length; i++)
5: {
6: formattedVal = formattedVal.replace("{" + (i - 1) + "}", arguments[i]);
7: }
8: return formattedVal;
9: }
Labels: db/textworks, javascript