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>} ...
Get Designing for Scalability with Erlang/OTP now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.