FAQ
What’s the difference between DogLog and other logging libraries?
Within the FRC software ecosystem, there are three main solutions for logging: DogLog, AdvantageKit, and Epilogue.
Here’s a quick breakdown of the differences between each library:
DogLog | AdvantageKit | Epilogue | |
---|---|---|---|
Creator | Team 581 | Team 6328 | WPILib |
Logging pattern | DogLog.log() | IO interfaces and annotations | Annotations |
Use case | Simplest logging possible | Replaying logs in simulation | Log every public or private field in a class |
Customizable log destinations | Yes (NT and datalog) | Yes (NT and datalog) | No (NT always on, datalog can be toggled) |
Multithreading | Yes (log processing thread) | Yes (log processing thread) | No |
Tunable values | Yes | Yes | No |
Supported language | Java | Java | Java |
One thing to note is that while it may technically be possible to use DogLog in combination with other logging libraries, this is definitely not recommended. You will almost certainly encounter bugs or other compatibility issues as a result.
Who uses DogLog?
DogLog is used by teams across the FRC community for a variety of purposes. Here’s a selection of DogLog users with open-source robot code you can review for inspiration:
- Team 4522 - Team SCREAM, extends DogLog to support logging fields at different frequencies to minimize loop times
- Team 3847 - Spectrum, uses their Telemetry class to seamlessly integrate priority levels,
Command
logging, etc., with DogLog’s extensible API - Team 9496 - LYNK, breaks down triggers for high-level logic by logging their main robot state with DogLog
And of course,
- Team 581 - Blazing Bulldogs, uses DogLog to provide visibility into robot automation, accelerating development at home and improving reliability at competitions
What should I log?
It can be tempting to simply throw every possible piece of data at DogLog, but often times this causes more problems than it solves. While DogLog is highly optimized for performant logging, there is a point where the roboRIO simply can’t keep up.
Take a look at all the fields you are logging, and think about whether or not they’re actually useful for your team. Here’s a few examples:
- Several debug logs added when first doing robot bring-up, which aren’t relevant anymore
- Logging more values than necessary for every motor (ex. temperature, stator current, supply current, applied voltage, velocity, etc.)
- Capturing all NetworkTables values, instead of just manually logging the handful of relevant fields
How can I get help with DogLog?
Feel free to open a GitHub issue if you’ve found a bug or there’s a feature request you’d like to see.
If you have questions about DogLog, how to use it, or anything else, you can start a GitHub discussion or create a reply on the DogLog Chief Delphi thread.