Just as a comment on this - I tried using #sync as an experiment and I get a 
primFailed on an Ubuntu docker image - so I think that comment in the image is 
misleading (or its a bug, or unfinished work)



On Thu, 18 Apr 2024, at 11:15 AM, Tim Mackinnon wrote:
> Hi Stef - I was aware of that class - but a good reminder to re-read it for 
> any extra info, but I don't see anything in particular mentioned about how 
> data is flushed - and I think this is one of those black arts from in the 
> field.
> 
> It looks like stdio uses an Stdiostream - and I did note an interesting 
> comment in #flush which mention #sync and
> "When writing, this syncs any written/flushed data still in the kernel file 
> system buffers to disk. This should generally be used after #flush, but on 
> Windows they do the same thing."
> 
> I've never heard of #sync before - and I wonder if the trick to getting 
> output without the cr is to do a "flush; sync" operation?
> 
> But even then, I am thinking that a server based logging tool is going to 
> need a cr on a log line to know how to interpret it and parse it into syslog 
> format, so perhaps I can't escape moving the a trailing cr policy - and just 
> try to make sure most of my logging adopts that standard (and just accept the 
> odd corruption when other libraries write out crTrace?).
> 
> I'm just curious how others handle this kind of stuff in the wild - maybe I 
> should ask on a Seaside list as they are more likely to delve into this (or 
> maybe the Gemstone guys). 
> 
> Its a world you don't normally pay attention to until you try and run 
> something on a server and want to use the modern tools available in that 
> world.
> 
> Tim
> 
> On Thu, 18 Apr 2024, at 6:43 AM, stephane ducasse wrote:
>> just out of my mind and before breakfast :)
>> 
>> did you see Stdio ?
>> 
>> S
>> 
>>> On 18 Apr 2024, at 01:31, Tim Mackinnon <tim@testit.works> wrote:
>>> 
>>> Hi - I've been messing around with deploying a hobby pharo app to the web.. 
>>> which has become a lot simpler over the years, although the tech keeps 
>>> changing and you have to relearn things.
>>> 
>>> Anyway, I have my image in one of the wonderful BA Docker containers, and 
>>> it runs well - and the host I'm using will show the logs for you, so you 
>>> can figure out what is going on... well that is if your logs come out 
>>> properly (and of course, if it gets really hairy then you can get a VNC 
>>> session onto the image and figure stuff out)
>>> 
>>> So logs are handy, and pharo these days has a nice headless mode that 
>>> redirects the Transcript to stdout - and there are also a few decent 
>>> logging frameworks as well.
>>> 
>>> But as most things go to the Transcript, and that goes to stdout - it 
>>> should be good. 
>>> 
>>> HOWEVER - flushing is the killer, as if things happen and the last thing 
>>> goes wrong, but the output isn't flushed, then you aren't going to see it.
>>> 
>>> So my question is how to properly flush? And I'm sure I've read something 
>>> about this before, but I can't find it.
>>> 
>>> From memory,  you often need to have a Transcript cr.  to flush your last 
>>> line.
>>> 
>>> BUT, most things in the image seem to use  "self crTrace:"  these days, 
>>> which is a cr to ensure the previous msg is separated from what you want to 
>>> write, and then you write your line out. However, as there is now cr -  you 
>>> might not see it.
>>> 
>>> So I tried changing my stuff to use "self traceCr:" (which is in the 
>>> image), and that still didn't seem to work - the last failing line wasn't 
>>> being output. Worse still, its confusing, as many things in the image are 
>>> using crTrace: and so you get intermingled messages, which are hard to 
>>> decipher.
>>> 
>>> So I tried: Transcript cr; show: msg; flush
>>> 
>>> But that didn't seem to work (which I don't understand)
>>> 
>>> Eventually I did: Transcript show: msg; cr; flush
>>> 
>>> And this seems to ensure things do reliably get outputted - but I'm 
>>> wondering if anyone can shed light on this areas?
>>> 
>>> Ideally I want to use: Transcript cr'; show: msg; flush 
>>> 
>>> As this plays much better with everything that is in the image - but is 
>>> there some way to do this? And indeed, will log tools the Bettersatack or 
>>> papertail play ball with output like this (as I guess they operate on 
>>> complete lines to interpret log levels etc),
>>> 
>>> Anyway - I'm curious if anyone else has done work in this area to shed 
>>> light?
>>> 
>>> Thanks,
>>> 
>>> Tim
>>> 
>>> 
>>> As an aside - for deployment - several years ago I came across dockerize.io 
>>> - which lets you upload a Docker image to a host, and it will run it for 
>>> you. Sadly that service didn't survive... but there are quite a few like it 
>>> now, and so I'm trying Render.com <http://render.com/> - which is similar, 
>>> but the twist is you need to store a Docker image in a registry somewhere 
>>> (I use gitlab from my CI pipeline), and then it will retrieve it and run it 
>>> for you (for either free in 40 minute chunks, or for $7/m - which is pretty 
>>> good, and possibly bit simpler than Digital Ocean). Its pretty cool, and 
>>> maybe I will write up about it sometime
>> 
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr
>> 06 30 93 66 73
>> 
>> "If you knew today was your last day on earth, what would you do 
>> differently? ....ESPECIALLY if, by doing something different, today might 
>> not be your last day on earth.” Calvin & Hobbes
>> 
>> 
> 

Reply via email to