[Ovmsdev] Add support for "log file ..." to log to the specified vfs file

Stephen Casner casner at acm.org
Thu Jan 11 00:34:42 HKT 2018


Michael,

I will implement the optional syslog distribution to all consoles.

                                                        -- Steve

On Wed, 10 Jan 2018, Michael Balzer wrote:

> Mark, Steve,
>
> thanks for the test & workaround.
>
> Yes, the syslog can better be distributed internally by the console system. The "tail" command is also intended for general debugging/monitoring
> of files. I thought it would be straight forward to implement, but another issue/idea turned up we should discuss -- I'll follow up on that
> after work.
>
> Regards,
> Michael
>
>
> Am 10.01.2018 um 01:07 schrieb Mark Webb-Johnson:
> > Nope:
> >
> > Here is /store:
> >
> >     OVMS > log file /store/log.txt
> >     ...
> >     I (37670) simcom: State: Enter PoweringOn state
> >     I (37670) simcom: Power Cycle
> >     OVMS > vfs stat /store/log.txt
> >     File /store/log.txt size is 0 and digest d41d8cd98f00b204e9800998ecf8427e
> >     OVMS > log file
> >     Closed log file
> >     OVMS > vfs stat /store/log.txt
> >     File /store/log.txt size is 1176 and digest b15515a15edeb75d04a2767ba66a721d
> >
> >
> > And here is /sd:
> >
> >     OVMS > log file /sd/log.txt
> >     I (15494) simcom: State timeout, transition to 1
> >     I (15494) simcom: State: Enter CheckPowerOff state
> >     OVMS > vfs stat /sd/log.txt
> >     File /sd/log.txt size is 0 and digest d41d8cd98f00b204e9800998ecf8427e
> >     OVMS > log file
> >     Closed log file
> >     OVMS > vfs stat /sd/log.txt
> >     File /sd/log.txt size is 122 and digest ae18d2d2ed63b5dd2381b5bf11d1779d
> >
> >
> > Seems to be the FAT filesystem itself.
> >
> > The vfs layer only seems to support a fsync operation, but no fflush. I'm guessing fflush just flushes the FILE buffers, but doesn't actually
> > sync that to disk. Adding 'fsync(fileno(ovms_log_file));' after 'fflush(ovms_log_file);' in ConsoleAsync::ConsoleLogger of
> > main/console_async.cpp seems to resolve this:
> >
> >     OVMS > log file /store/log.txt
> >     OVMS > vfs stat /store/log.txt
> >     File /store/log.txt size is 1176 and digest b15515a15edeb75d04a2767ba66a721d
> >     I (15450) simcom: State timeout, transition to 13
> >     I (15620) simcom: State: Enter PoweredOff state
> >     OVMS > vfs stat /store/log.txt
> >     File /store/log.txt size is 1296 and digest 96221e6daf7258b6e2c0d9eb4a92cad3
> >
> >
> > There is also a separate issue of multi-line messages not being logged correctly (LF -> "|" translation). I've pushed both fixes to
> > the remotes/origin/for-v3.0 branch Steve and I are working on for v3.0. Haven't tested in 2.1 master, but it will probably work there if you
> > want to merge back to master.
> >
> > All that said, I think Steve is correct. A tail function (although useful) is not the best way of doing this particular thing. Better to have
> > a 'log monitor yes/no' command that sets a flag on the current console (presumably in OvmsWriter like the m_issecure flag). If set, then log
> > messages are shown on that console. Perhaps default to 'yes' for async console, and 'no' for the others.
> >
> > Now SD CARD support is coming, anybody want to step forward and extend components/can to support CAN bus logging to a file (in crtd format, or
> > perhaps support one or two popular formats)? Implementation would be in class canbus, very similar to m_trace; just need to have a FILE* m_log
> > and appropriate commands / logging of packet write/read in the same place that trace does it.
> >
> > Regards, Mark.
> >
> >> On 10 Jan 2018, at 7:28 AM, Stephen Casner <casner at acm.org <mailto:casner at acm.org>> wrote:
> >>
> >> Michael,
> >>
> >> I think we can do better than "tail" command.  The design for printing
> >> log messages is prepared to print on all registered consoles.  We have
> >> restricted the console_logger() function to just output on the async
> >> console out of concernt that sending output to the remote consoles
> >> might be too much of a burden.  But if that is what's desired for a
> >> particular user's scenario, then what we should do is to add a command
> >> to direct the output to all consoles.
> >>
> >>                                                        -- Steve
> >>
> >> On Wed, 10 Jan 2018, Michael Balzer wrote:
> >>
> >>> Mark,
> >>>
> >>> I've built a simple "tail" command to follow the file log on the telnet console.
> >>>
> >>> Unfortunately -- with v2.1 -- the fflush() on the log file doesn't work as expected, the file contents will not be updated until I close the
> >>> file.
> >>>
> >>> Is that issue solved with v3.x?
> >>>
> >>> Regards,
> >>> Michael
> >>>
> >>>
> >>> Am 08.01.2018 um 07:28 schrieb Mark Webb-Johnson:
> >>>> I've restructured the log commands a bit:
> >>>>
> >>>>  * The old "level <severity>" command has moved to "log level <severity>"
> >>>>
> >>>>  * A new "log file <path>" command has been added. For example "log file /sd/log.txt" will mean that anything that gets logged to the
> >>>> console will also get
> >>>>    appended to /sd/log.txt as well, until reboot. You can use /sd (if SD CARD is working for you), or /store (but take care - that is
> >>>> system flash).
> >>>>
> >>>>  * You should be able to hook this in at the "sd.mounted" event script, to turn on logging to sd card on boot (again, if SD CARD is working
> >>>> for you).
> >>>>
> >>>>
> >>>> Enjoy, Mark
>
> --
> Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
> Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>
>



More information about the OvmsDev mailing list