You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.8KB

  1. //! Tools to record and display what's happening in your program
  2. //!
  3. #![feature(test)]
  4. #[macro_use] extern crate slog;
  5. #[allow(unused_imports)]
  6. #[macro_use] extern crate money;
  7. extern crate test;
  8. extern crate zmq;
  9. extern crate influent;
  10. extern crate chrono;
  11. extern crate hyper;
  12. extern crate termion;
  13. extern crate sloggers;
  14. extern crate slog_term;
  15. extern crate slog_async;
  16. extern crate fnv;
  17. extern crate ordermap;
  18. extern crate decimal;
  19. extern crate uuid;
  20. extern crate hdrhistogram;
  21. extern crate windows;
  22. extern crate pubsub as pub_sub;
  23. use chrono::{DateTime, Utc};
  24. #[allow(unused_imports)]
  25. use sloggers::Build;
  26. #[allow(unused_imports)]
  27. pub use sloggers::types::Severity;
  28. use sloggers::types::TimeZone;
  29. #[allow(unused_imports)]
  30. use sloggers::file::FileLoggerBuilder;
  31. use slog::Drain;
  32. pub mod influx;
  33. pub mod warnings;
  34. pub mod latency;
  35. pub mod hist;
  36. #[cfg(feature = "trace")]
  37. pub const LOG_LEVEL : Severity = Severity::Trace;
  38. #[cfg(all(feature = "debug", not(feature = "trace")))]
  39. pub const LOG_LEVEL : Severity = Severity::Debug;
  40. #[cfg(not(any(feature = "debug", feature = "trace")))]
  41. pub const LOG_LEVEL : Severity = Severity::Info;
  42. const CHANNEL_SIZE: usize = 40_000;
  43. /// converts a chrono::DateTime to an integer timestamp (ns)
  44. ///
  45. pub fn nanos(t: DateTime<Utc>) -> u64 {
  46. (t.timestamp() as u64) * 1_000_000_000_u64 + (t.timestamp_subsec_nanos() as u64)
  47. }
  48. //#[cfg(not(any(test, feature = "test")))]
  49. pub fn file_logger(path: &str, level: Severity) -> slog::Logger {
  50. let mut builder = FileLoggerBuilder::new(path);
  51. builder.level(level);
  52. builder.timezone(TimeZone::Utc);
  53. builder.channel_size(CHANNEL_SIZE);
  54. builder.build().unwrap()
  55. }
  56. pub fn truncating_file_logger(path: &str, level: Severity) -> slog::Logger {
  57. let mut builder = FileLoggerBuilder::new(path);
  58. builder.level(level);
  59. builder.timezone(TimeZone::Utc);
  60. builder.truncate();
  61. builder.channel_size(CHANNEL_SIZE);
  62. builder.build().unwrap()
  63. }
  64. // #[cfg(any(test, feature = "test"))]
  65. // pub fn file_logger(_: &str, _: Severity) -> slog::Logger {
  66. // use slog::*;
  67. // Logger::root(Discard, o!())
  68. // }
  69. #[deprecated(since="0.4.0", note="Turns out the file logger in sloggers uses async, \
  70. making the async here duplicative")]
  71. pub fn async_file_logger(path: &str, level: Severity) -> slog::Logger {
  72. let drain = file_logger(path, level);
  73. let async_drain =
  74. slog_async::Async::new(drain)
  75. .chan_size(100_000)
  76. .build();
  77. slog::Logger::root(async_drain.fuse(), o!())
  78. }
  79. pub fn dt_nanos(t: DateTime<Utc>) -> i64 {
  80. (t.timestamp() as i64) * 1_000_000_000_i64 + (t.timestamp_subsec_nanos() as i64)
  81. }
  82. pub fn dur_nanos(d: ::std::time::Duration) -> i64 {
  83. (d.as_secs() * 1_000_000_000_u64 + (d.subsec_nanos() as u64)) as i64
  84. }