[Date Prev][Date Next][Thread Prev][Thread Next][Minivend by date
][Minivend by thread
]
Re: [mv] [tag op=log....
****** message to minivend-users from "Bill Randle" <billr@exgate.tek.com> ******
OK, gang, here's an attempt to document and summarize what's going on
with the [tag log] tag:
1. MV-3.x, MV-4.00, MV-4.01 and MV-4.02 all behave the same.
2. Starting with MV-4.03, there was a change in the API for
[tag op=log].
3. The difference is due not to the way the [tag] tag works,
but changes in the do_log()/log() subroutine. [Before 4.03
it was do_log(), in 4.03 and later it's log().]
For those that are still using a pre-4.03 version of minivend,
here's what works:
[tag log filename]data to log[/tag] # positional
[tag op=log arg=filename]data to log[/tag] # named
[tag arg=filename op=log]data to log[/tag] # named, reverse order
In versions 4.03 and later, this is what will work:
[tag op=log file=filename]data to log[/tag] # named
[tag file=filename op=log]data to log[/tag] # named, reverse order
These will *not* work in 4.03 and later:
[tag op=log arg=filename]data not logged[/tag] # named with <arg>
[tag arg=filename op=log]data not logged[/tag] # named with <arg>
[tag log filename]data not logged][/tag] # positional
[tag log file=filename]data not logged[/tag] # mixed positional/named
One of the new tags in 4.03 is [log], so starting in 4.03 you can also do
this:
[log filename]data to log[/log] # positional
[log file=filename]data to log[/log] # named
[log arg=filename]data to log[/log] # named, using <arg>
Note: in 4.03 and later, you can use [log arg=file] but you can not use
[tag op=log arg=file]. This is because the 'arg=' option is automatically
translated to 'file=' when it used as part of the [log] tag, but not
when its used as part of the [tag] tag.
For those of you interested in the internal details, here's the magic
line of code that changed between 4.02 and 4.03:
--- minivend-4.02/lib/Vend/Interpolate.pm Thu Mar 9 08:32:43 2000
+++ minivend-4.03/lib/Vend/Interpolate.pm Sat Mar 25 02:16:49 2000
@@ -1722,6 +1730,6 @@
my $status;
- $file = $Vend::Cfg->{LogFile} if ! $file;
+ $file = $opt->{file} || $Vend::Cfg->{LogFile};
$file = Vend::Util::escape_chars($file);
What's not shown above is that $file is the first argument passed to the
do_log/log subroutine. From the diff you can see that in 4.02, the file
used for logging is the first argument to the do_log() subroutine, if
it's specified, otherwise it uses the LogFile defined in the catalog
config file (if any).
Starting in 4.03, the filename must be explicity passed as the 'file'
option, and if that's not defined it uses the catalog config file
entry (if any). This is why you *must* use 'file=filename' when
using [tag op=log]. This is also why strictly positional parameters
[tag log filename] will not work.
The way the [tag] tag works is that it takes its first positional
argument (or the op= argument) as the command (e.g. log, time, flag).
The second positional argument (if any), or the arg= argument is
passed *as the first parameter* to the operational function called
by the do_tag() subroutine. Any other named parameters are passed
thru as part of the $opt hash (except interpolate=, which is
handled earlier in the process).
With that said, I have a suggested patch for 4.05 to help the transition:
--- minivend-4.04/lib/Vend/Interpolate.pm.orig Sat Apr 15 20:18:43 2000
+++ minivend-4.04/lib/Vend/Interpolate.pm Sun May 28 09:13:45 2000
@@ -1746,6 +1746,7 @@
my $status;
- $file = $opt->{file} || $Vend::Cfg->{LogFile};
+ $file = $opt->{file} || $Vend::Cfg->{LogFile}
+ unless defined $file;
$file = Vend::Util::escape_chars($file);
This will allow the pre-4.03 syntax - both named and positional - to
work, as well as the new syntax. It also would make the behavior
match the documentation, which says [tag log filename] should work.
New shops built with 4.03 and later should probably start using the
[log] tag to avoid confusion altogether.
Now, for those of you that have read this far, here's a bonus for you.
Did you know that [tag op=log] or [log] also can take serveral other
named parameters? I didn't, until I started looking into this. So, as
another contribution to the never ending documentation project:
The log tag accepts several optional arguments to specify
how the data to be logged should be processed prior to
writing it to the log file. These options are:
process=nostrip Normally, the data string is processed
to change CR LF to LF, remove leading
and trailing spaces and make sure it
ends with a newline. By specifying this
option, the data is logged as written.
type=text|quote|error Using the type option specifies possible
additional processing to be done on the
data string and where the data should be
logged. The default operation when no
type= option is specified is to split
the data string into records and fields
and pass to the logDebug() utility function.
The default record delimiter is '\n'; the
default field delimiter is '\t'. The
delimiters can be changed with the
delimiter= and record_delim= options.
The type= option can take on the following
values:
text : the data string is directly
written to the specified file.
error : if a filename is specified with
the file= option, the data string is
formated as a standard error message and
written to that file. If a filename is
not specified, the standard logError()
fucntion is called with the data string
as its argument.
quot[e] : the data string is split into
records and fields and written to the
specified filename using the standard
logData utility function. The record
delimter defaults to '\n' but can be
changed with the record_delim= option.
delimiter=string sets the delimiter used to split records
into fields. Default is "\t" (a TAB).
record_delim=string sets the record delimiter used to split
the data string into one or more records
before splitting into fields. Default is
"\n" (a newline).
This tag also accepts the hide= and interpolate= options. Normally,
the status returned from the function that actually writes the
data to the logfile is returned, unless hide=1 is specified.
-Bill Randle
billr@exgate.tek.com
On May 28, 9:40am, cfm@maine.com wrote:
} Subject: Re: [mv] [tag op=log....
}
} [ text/plain
} Encoded with "quoted-printable" ] :
****** message to minivend-users from cfm@maine.com ******
}
} On Sat, May 27, 2000 at 10:26:58PM -0700, Barry Treahy wrote:
} > ****** message to minivend-users from Barry Treahy <Barry@BSTent.com>
******
} > I can understand parameters being position if they are not named, but named
} > parameters should work regardless of the order and there seems to be
specific
} > problems with the tag log in both 3.14-5 and 4.04. I was pulling my hair
out
} > attempting to do page and activity logging and ultimately went to a
usertag. To
} > >
} > > after changing from MV3 to MV4
} > > [tag file="<filename>" op=log interpolate=1]
} > > doesn´ work. After answer from Mike to use
} > > [tag arg="<filename>" op=log interpolate=1]
} > > instead, it works. After updating from MV4.03 to MV4.04,
} > > [tag arg="<filename>" op=log interpolate=1]
} > > doesn´ work. After rewriting the codes to
} > > [tag file="<filename>" op=log interpolate=1]
} > > it works. I´ve read the WHATSNEWS! But couldn´t see any hints about
} > > this. Any comment?
}
} One would expect that named parameters would not be
} positionally dependant; it's my guess that something else
} is the culprit. You'd probably not find that in the README
} because it's not intentional or known.
}
} We, OTOH, use many minivend calls directly. The parameters
} to db_array functions changed from mv3 to 4. I'd not
} expect changes to that internal API to be documented either;
} it's **internal**.
}
} Minivend has a long evolutionary history. Code that evolves
} does tend to spaghetti. Maybe a week or two ago there was
} a discussion on /. about it. My guess is that 4 cleaned up a lot
} of that but it is a never ending battle. One needs a whole
} test harness to check that. We on this list are that test
} harness. ;^)
}
} cfm
} --
}
} Christopher F. Miller, Publisher cfm@maine.com
} MaineStreet Communications, Inc 208 Portland Road, Gray, ME 04039
} 1.207.657.5078 http://www.maine.com/
} Database publishing, e-commerce, office/internet integration, Debian linux.
-
To unsubscribe from the list, DO NOT REPLY to this message. Instead, send
email with 'UNSUBSCRIBE minivend-users' in the body to Majordomo@minivend.com.
Archive of past messages: http://www.minivend.com/minivend/minivend-list