Logging
By default, AnyCable Ruby logs to STDOUT with INFO
level but can be easily configured (see Configuration), for example:
$ bundle exec anycable --log-file=logs/anycable.log --log-level debug
# or
$ ANYCABLE_LOG_FILE=logs/anycable.log ANYCABLE_LOG_LEVEL=debug bundle exec anycable
You can also specify your own logger instance for full control:
# AnyCable invokes this code before initializing the configuration
AnyCable.logger = MyLogger.new
IMPORTANT: When using with Rails, AnyCable automatically sets its logger to Rails.logger
, so AnyCable-specific logging options are no-op.
gRPC logging
AnyCable does not log any GRPC internal events by default. You can turn GRPC logger on by setting log_grpc
parameter to true:
$ bundle exec anycable --log-grpc
# or
$ ANYCABLE_LOG_GRPC=t bundle exec anycable
Debug mode
You can turn on verbose logging (with gRPC logging turned on and log level set to "debug"
) by using a shortcut parameter–debug
:
$ bundle exec anycable --debug
# or
$ ANYCABLE_DEBUG=1 bundle exec anycable
Log tracing
When using with Rails, AnyCable adds a session ID tag (sid
) to each log entry produced during the RPC message handling. You can use it to trace the request's pathway through the whole Load Balancer -> WS Server -> RPC stack.
Logs example:
[AnyCable sid=FQQS_IltswlTJK60ncf9Cm] RPC Command: <AnyCable::CommandMessage: command: "subscribe", identifier: "{\"channel\":\"PresenceChannel\"}", connection_identifiers: "{\"current_user\":\"Z2lkOi8vbWFuYWdlYmFjL1VzZXIvMTEwODQ0OTc\"}", data: "", env: <>>
[AnyCable sid=FQQS_IltswlTJK60ncf9Cm] User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1