ImprovementTimber for Ruby v2.1.0.rc1

    Jun 2nd, 2017

    This update introduces a lot of great new configuration options and performance improvements:

    Configuration options

    The README has been updated to include a configuration section. This demonstrates common configuration setups. You can also view the Timber::Config class for a full list of options. Here's the high level overview:

    All Timber::Integrations::* classes received a enabled= and a silenced= class methods. The former disables the integration entirely, the latter keeps the integration enabled but silences the logs. Timber::Integrations::Rack::HTTPEvents now has a .collapse_into_single_event= method that will only log the response log instead of both the request and response.

    A convenience Timber::Config.instance.logrageify! method was added that automatically silences the appropriate logs to behave similarly to lograge. It uses the above settings to do so. Timber::Integrations::Rack::HTTPEvents.silence_request= was added to provide the ability to silence noisy requests (load balancer checks).

    General improvements

    The Timber::Contexts::Release context was added and it will automatically set itself if the proper environment variables are set. You can see an example in the configuration section of the README. The installer was completely reworked and received a number of great improvements, notably the support for multiple environments, avoiding the need to run the installer multiple times.

    A lot of great doc updates. The readme has been updated as well as the library docs.

    ImprovementSearch Syntax Improvements

    May 23rd, 2017

    We're always looking for ways to make our search feel effortless. Today we released a few welcome changes to our search syntax:

    1. hello world - Now defaults to a phrase match, where the phrase hello world must appear within the log line (case insensitive). Previously, this would perform an intersection of hello and world, and acheiving a phrase match required quotes. After collecting feedback for a few months this continually came up. We hope this makes searching a little more effortless.
    2. MyModule::MySubModule - Is now treated as a literal text search. Searching for ruby module names is a very common task. Previously, because : is a special character for attribute search, this would throw an error saying the MyModule: attribute does not exist.
    3. debug, info, warn, error, and fatal - Now search the repsecitve log level as well as the log line message. Previously, this required an attribute search like level:warn. Because level is displayed on the screen, we've seen a lot of users type levels expecting it to work. Now it does!

    NewTimber Elixir V2 Released

    May 23rd, 2017

    V2 of our Elixir library is now available. V2 includes a variety of improvements, notable changes are listed below.

    Notable changes

    1. Anyone logging to STDOUT will be pleased to know that v2 now uses the :console Logger backend included with Elixir. Functionally this performs exactly the same, but the benefits of using a standard library include: improved stability, better performance, active ongoing maintenance, etc.

    2. The installer has been vastly improved:

      1. It now recognizes umbrella applications, handling them accordingly.
      2. A bug was squashed for Phoenix versions 1.3, the installer should work great there as well.
      3. The whole flow has been refined to use better messaging, formatting, and pauses that make it more apparent when user action is needed.

    Upgrading

    We've placed an UPGRADING.md file in our repo. The process is very simple:

    1. Delete config/timber.exs

    2. Re-run the single command installer (mix timber.install). This commend, with your API-key, is located in the settings of your application.

    Eenjoy! Happy logging.

    ImprovementShorter, Easier Field Paths

    May 23rd, 2017

    We're always looking for small subtle changes that could improve the UX of Timber. Today we released what we're calling "short paths." Here's a simple example:

    Instead of issuing a query like:

    event.server_side_app.exception.name:RuntimeError

    You can now do:

    exception.name:RuntimeError

    Here are a few more examples:

    Long field pathShort field path
    context.http.request_idhttp.request_id
    context.user.iduser.id
    event.server_side_app.http_server_requesthttp_server_request
    event.server_side_app.sql_querysql_query

    Give it a try!

    NewView a Line in Context

    May 23rd, 2017

    Have you ever searched for a line and wanted to view it in the context of it’s HTTP request? Today we added a tag that makes this as easy as a click.

    View logs in context is often critical to resolve issues quickly. And we’re constantly looking for ways to make this easier.

    We also added a new docs page for this feature.

    Enjoy!

    NewTail Users With a Click

    May 23rd, 2017

    Today we added a subtle tag to your logs, the "User Tag".

    This makes it dead simple to tail a user.

    Have you ever wanted to test something in staging or production, but there was too much noise in your logs? This gives that “development” like experience in these environments, narrowing the logs you see to just the ones you’re generating.

    Watch a customer reproduce an issue.

    We recently had a customer unable to identify an issue with one of their clients. They were able to easily narrow down to that specific user and identify a bad header they were sending. A problem that would have taken hours, took < 15 minutes to resolve.

    You can read more on tailing user in the tail a user docs page.

    Enjoy!

    OptimizationConsole Updates

    May 23rd, 2017

    Today we did some general benchmarking of our console. While performance overall been pretty good, we identified 2 issues that will improve it further.

    You’ll notice a new loading screen in-between searches. It’s a simple overlay. This eliminates re-drawing in the browser, making the experience between searches much more fluid.

    We re-factored the log line rendering logic and reduced the number of rendering iterations that are performed as new lines show up.

    The net result is ~60% reduction in load and rendering time based on benchmarks. We’ll continue to look for ways to push performance even further.