[erlang-questions] lager and dynamic log cutting via compiled module

Ulf Wiger ulf@REDACTED
Sun Sep 8 00:08:31 CEST 2013


I'm not sure my example was really relevant to this thread, but I still think it's pretty cool. :)

/Ulf W

Ulf Wiger, Feuerlabs, Inc.
http://feuerlabs.com

7 sep 2013 kl. 23:22 skrev Ulf Wiger <ulf@REDACTED>:

> 
> If library applications are listed in reltool.config as {App, load}, they will not be started.
> 
> Also, as regards dependencies for parse transforms, I recently wrote a fairly
> complex parse transform that I thought is both well-contained and fairly 
> easy to understand and maintain.
> 
> https://github.com/uwiger/locks/blob/master/src/locks_watcher.erl
> 
> A brief explanation. In the module being transformed, a pseudo-call to
> locks_watcher/1 is replaced by code returning {erl_eval, exprs, [Es,Bs]},
> which is then used in spawn/4, in order to launch a script on a remote
> node.
> 
> watch_node(N) ->
>    {M, F, A} =
>        locks_watcher(self()),  % expanded through parse_transform
>    spawn(N, M, F, A).
> 
> The parse_transform function actually lifts the abstract code from its own
> debug info, and also inlines any local calls made from the lifted function.
> The transform and inlining code is only ca 80 lines of code and should
> be fairly reusable (sans the slight absurdity of generating abstract abstract
> code).
> 
> So in the linked module above, lines 22-65 contain the code that's lifted
> into the transformed module. It's plain Erlang, with the only real complication
> that recursion is done using funs.
> 
> BR,
> Ulf W
> 
> On 27 Aug 2013, at 05:14, Andrew Thompson <andrew@REDACTED> wrote:
> 
>> On Mon, Aug 26, 2013 at 09:56:55PM -0500, Paul Davis wrote:
>>> Andrew,
>>> 
>>> Can you explain the reticence about having compiler and syntax_tools as
>>> dependencies? At first I was mostly assuming you wanted lager to handle
>>> compiler logging or some such so it was a question of startup ordering.
>>> Given goldrush I'm wondering if it were a more a general concern about just
>>> removing dependencies for file sizes and so on.
>> 
>> It was mainly the complexity incurred for application startup by
>> depending on those applications, even though they're only library
>> applications, the application controller insists they be 'started'.
>> 
>> That complexity seems to be mostly handled by lager now, so the original
>> reasons may not have any grounding anymore.
>> 
>> Andrew
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
> 
> Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.
> http://feuerlabs.com
> 
> 
> 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list