Chapter 5. Controlling OTP Behaviors
We have in the previous chapters covered the highlights of the
gen_server behavior. You should by now have implemented your
first client-server application and started to build an idea of how OTP
behaviors help you to reduce your code base by allowing you to focus on the
specifics of what your system has to do. This chapter digs deeper into
behaviors, exploring some of the advanced topics intermixed with built-in
functionality. While we are focusing on generic servers, most of what we
write will apply to many of the other behaviors, including those you could
implement yourself. Read with care, as we reference this chapter often in
the remainder of this book.
The sys Module
We’ve mentioned many times the built-in functionality you get as a result of
using OTP behaviors and the ease with which you can add your own features.
Most of what we cover is accessed through the sys module,
allowing you to generate trace events, inspect and manipulate behavior
state, as well as send and receive system messages. All of this
functionality works on the standard OTP behaviors, but also, as we show in
Chapter 10, you can reuse it when defining your
own behaviors.
Tracing and Logging
Let’s find out how built-in tracing works by running a little example. Start
your frequency server in the shell and, using the sys module, try the
following:
1>frequency:start().{ok,<0.35.0>} 2>sys:trace(frequency, true).ok 3>frequency:allocate().*DBG* frequency got call {allocate,<0.33.0>} ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access