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

Michael Balzer dexter at expeedo.de
Wed Jan 10 20:54:50 HKT 2018


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20180110/901254bc/attachment.htm>


More information about the OvmsDev mailing list