<div dir="ltr">Pierre,<div><br></div><div>thank you for issue.</div><div><br></div><div>I think that virtual log is a good idea. Especially if it would support viewing in UI just like other logs.</div><div>Log-viewer is good - line numbers and colors are helpful.</div><div><br></div><div>In this case I think there also should be header-lines with step name to separate logs of different steps. </div><div>This should also help to navigate quick between log parts.</div><div><br></div><div>But on the other hand I will save logs to files anywhere because I have such requirement.</div><div>Information about releases should be accessible for several years. There will be next versions of buillbot, tables in DB can be renamed, hdd can fail,  etc.</div><div><br></div><div>It's easier to backup log-files than think about compatibility and reliability.</div><div> </div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-03-28 15:43 GMT+03:00 Pierre Tardy <span dir="ltr"><<a href="mailto:tardyp@gmail.com" target="_blank">tardyp@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks Mike for the feedback, it helps a lot.<div><br></div><div>There is not only one log for steps. 'stdio' is the default name for base log produced by commands. You can add custom logs, which will have different names</div><div><a href="https://github.com/buildbot/buildbot/issues/3085" target="_blank">https://github.com/buildbot/<wbr>buildbot/issues/3085</a></div><div><br></div><div>Maybe a virtual log concatenating all logs for a step would be an help for you as well?</div><div><br></div><div>Note that logs are stored compressed already in the db, so you won't gain much space by tgz them.</div><div>Agree on the grouping, though.</div><div><br></div><div>Release build system is an important use case for buildbot as we intend to be a build and test framework (not only CI).</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Pierre<br><div><br></div></div></font></span></div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 28, 2017 at 2:23 PM Mike Alexeev <<a href="mailto:mike.42.alexeev@gmail.com" target="_blank">mike.42.alexeev@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713gmail_msg">Pierre, <div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">In my case I'm developing release build system (not CI) with some requirements.</div><div class="m_-8267061988205499713gmail_msg">For example - reproducing builds, generating reports with lists of all sources and binaries, etc.</div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">Log file is one of build artifacts among other. </div><div class="m_-8267061988205499713gmail_msg">It is more suitable to have one big log for whole component instead of logs for each step then grepping or searching in text editor.<br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">Logs for each step can be downloaded in UI. But filenames are not good - they all named 'stdio'.</div><div class="m_-8267061988205499713gmail_msg">(I haven't thought about it yet, but maybe it would be better to name them like  {buildername}_{<span style="color:rgb(51,51,51);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:14px;background-color:rgb(245,245,245)" class="m_-8267061988205499713gmail_msg">buildnumber</span>}_{<wbr>stepname}_{slug}.log  ? )</div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">Archiving logs as I think can save disc space and also help grouping logs.</div><div class="m_-8267061988205499713gmail_msg">For example on my job I'm setuping projects with about 100 builders in each. All of builders run to build in the end one package set (rpm and deb). </div><div class="m_-8267061988205499713gmail_msg">And it is convenient to download one .tgz with 100 logs.</div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">In my opinion log system in buildbot is good. It is nice that we can see log during buildtime and logs are updating.</div><div class="m_-8267061988205499713gmail_msg">Other cases (like mine) are very specific and maybe not suitable  for every project especially for CI cases.</div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div></div><div class="gmail_extra m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"><div class="gmail_quote m_-8267061988205499713gmail_msg">2017-03-28 14:00 GMT+03:00 Pierre Tardy <span dir="ltr" class="m_-8267061988205499713gmail_msg"><<a href="mailto:tardyp@gmail.com" class="m_-8267061988205499713gmail_msg" target="_blank">tardyp@gmail.com</a>></span>:<br class="m_-8267061988205499713gmail_msg"><blockquote class="gmail_quote m_-8267061988205499713gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713gmail_msg">Hi Mike,<div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">Thanks for sharing this code. I think it is a very interesting approach.</div><div class="m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713gmail_msg">All,</div><div class="m_-8267061988205499713gmail_msg">I'd like to better understand the reasons why you want to archive those build logs.</div><div class="m_-8267061988205499713gmail_msg">What do you want to do with them in the long term?</div><div class="m_-8267061988205499713gmail_msg">Why having them accessible from the buildbot UI/rest api is not enough?</div><div class="m_-8267061988205499713gmail_msg">Do we need a build report archiver reporter included in buildbot?</div><span class="m_-8267061988205499713m_7127514397302455418HOEnZb m_-8267061988205499713gmail_msg"><font color="#888888" class="m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713gmail_msg">Pierre</div></font></span></div><div class="m_-8267061988205499713m_7127514397302455418HOEnZb m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418h5 m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713gmail_msg"><div class="gmail_quote m_-8267061988205499713gmail_msg"><div dir="ltr" class="m_-8267061988205499713gmail_msg">On Tue, Mar 28, 2017 at 12:49 PM Mike Alexeev <<a href="mailto:mike.42.alexeev@gmail.com" class="m_-8267061988205499713gmail_msg" target="_blank">mike.42.alexeev@gmail.com</a>> wrote:<br class="m_-8267061988205499713gmail_msg"></div><blockquote class="gmail_quote m_-8267061988205499713gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Hello Pierre,<div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Thank you for advice. </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I will use reporter class instead of Build class customization.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Alvaro, anyway here is an example of subclassing Build:</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><a href="https://pastebin.com/gfq1wQLG" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://pastebin.com/gfq1wQLG</a> </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Maybe it will be helpful in other cases  </div></div><div class="gmail_extra m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">2017-03-27 21:49 GMT+03:00 Pierre Tardy <span dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><<a href="mailto:tardyp@gmail.com" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">tardyp@gmail.com</a>></span>:<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><blockquote class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Hi all,</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Usually, the way to do that is to setup a custom reporter class.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">You can then use the data api to fetch as many information on the build as you need to build your html report, and push it to S3.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">The details of what you can get with rest api is documented here:</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><a href="https://docs.buildbot.net/0.9.5/developer/rest.html" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://docs.buildbot.net/0.9.<wbr>5/developer/rest.html</a></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">The best is to look at the example of reporters/utils <a href="https://github.com/buildbot/buildbot/blob/master/master/buildbot/reporters/utils.py" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://<wbr>github.com/buildbot/buildbot/<wbr>blob/master/master/buildbot/<wbr>reporters/utils.py</a></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">If you are not confident enough with twisted and async, you can just put a MasterShellCommand with a python script in the end of your builds and use the REST api to fetch the data you need.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">In order to get raw logs, you can use the raw log endpoint (no need for logobservers!):</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">e.g: <a href="https://nine.buildbot.net/api/v2/logs/357614/raw" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://nine.buildbot.net/api/<wbr>v2/logs/357614/raw</a></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Note that buildbot store the stdout/stderr information, which is removed when you fetch it via raw endpoint.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Here is an example on how to process the stream logs that we use for debugging our integration tests:</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><a href="https://github.com/buildbot/buildbot/blob/master/master/buildbot/test/util/integration.py#L246" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://github.com/buildbot/<wbr>buildbot/blob/master/master/<wbr>buildbot/test/util/<wbr>integration.py#L246</a><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Regards</div><span class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449HOEnZb m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><font color="#888888" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Pierre</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div></font></span></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449HOEnZb m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449h5 m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Le lun. 27 mars 2017 à 18:41, Alvaro Erickson <<a href="mailto:alvaro.erickson@gmail.com" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">alvaro.erickson@gmail.com</a>> a écrit :<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><blockquote class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Hi Mike,<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>I too would like to see what your solution for saving a log (into plain text, not html) for all steps after a build is finished. Specifically, if you could please share the subclassed Build class for log generation. Any examples would be very helpful.<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>Background: On my work project, one of the goals is they want all the build logs to be archived.<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>Regards,<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>Alvaro<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="gmail_extra m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">On Mon, Mar 27, 2017 at 8:52 AM, Mike Alexeev <span dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><<a href="mailto:mike.42.alexeev@gmail.com" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">mike.42.alexeev@gmail.com</a>></span> wrote:<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><blockquote class="gmail_quote m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">Hello, Koutheir<div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I have also similar problem. </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I need to save log from all steps after build finished.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">No html just plain text.<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">It seems that there is no ready solution. </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">For example there is no file storage in buildbot for files (reports, logs and other build artifacts).</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">So my solution is not universal though it can be helpful. </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">For log generation I subclassed Build class. You can set your own custom Build class</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">to build factory in buildbot config.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I overrided buildFinished method and added there code to collect log from all steps.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">In build instance you have access to Data API and you can read logs from DB.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I can share example if you want.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">For file serving I use nginx.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I added links to log in build page template and substitute path to log based on build properties.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">So every build has link on its page to log.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">I think that saving log can also be implemented as step running on Local Worker </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">(it runs on master).  But I used custom build class because it looks cleaner (no odd steps in build).</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">By the way, can be there default implementation for file storage in buildbot? </div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">For example default solution with twisted file serving</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">and possibility to use server like nginx in bigger setups. Just like db setup - sqlite has no external</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"> processes and easy to setup, but  also you can use postgre which much more faster.</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">What about adding post-build hook in configuration? Log-saving method for example could be</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"> set there</div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div><div class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div></div>
<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">______________________________<wbr>_________________<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
users mailing list<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
<a href="mailto:users@buildbot.net" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">users@buildbot.net</a><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
<a href="https://lists.buildbot.net/mailman/listinfo/users" rel="noreferrer" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://lists.buildbot.net/<wbr>mailman/listinfo/users</a><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></blockquote></div><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>
______________________________<wbr>_________________<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
users mailing list<br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
<a href="mailto:users@buildbot.net" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">users@buildbot.net</a><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg">
<a href="https://lists.buildbot.net/mailman/listinfo/users" rel="noreferrer" class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187m_2590368696160643449m_9099353080319539250gmail_msg m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg" target="_blank">https://lists.buildbot.net/<wbr>mailman/listinfo/users</a></blockquote></div>
</div></div></blockquote></div><br class="m_-8267061988205499713m_7127514397302455418m_1605640043987494187gmail_msg m_-8267061988205499713gmail_msg"></div>
</blockquote></div>
</div></div></blockquote></div><br class="m_-8267061988205499713gmail_msg"></div>
</blockquote></div>
</div></div></blockquote></div><br></div>