Unreleased
==========

0.6.2 (2023-03-23)
==================

- Add security warning for "colored" feature when using a global allocator
  to doc homepage and README.md. See
  [fern-0.6.2 README.md](https://github.com/daboross/fern/blob/fern-0.6.2/README.md)
- Change examples to use `env_logger`-style formatting
- Improve main documentation example explanation
- Misc. style improvements (clippy lint fixes which have no functional change)

0.6.1 (2022-04-15)
==================

- Document reopen feature requiring a feature flag
  (thanks [@Palladinium]!)
- Fix typo in colors documentation (thanks [@sourcefrog]!)
- Add support for reopen v1 under reopen-1 feature (thanks [@vorner]!)
- Add syslog v6 support under syslog-6 feature (thanks folk at [@EasyPost]!)
- Fix README badges

0.6.0 (2020-03-09)
==================

- Move date-based file logger under its own feature (thanks [@dekellum]!)

0.5.9 (2019-10-23)
==================

- Add a rotating date-based file logger (thanks [@tanujitghosh]!)
- Add a file logger which supports reopening files on SIGHUP via the
  [reopen] crate (thanks [@itkovian]!)
- Ensure Windows console colors are enabled whenever a ColoredLevelConfig
  is created on Windows (thanks [@Songtronix]!)
- Change minimum rust version from 1.16 to 1.32, as it had already
  been effectively changed by a patch update in one of our
  dependencies (cfg-if)
- Update crate to Rust 2018 edition (thanks [@tymcauley]!)

0.5.8 (2019-03-25)
==================

- Change `syslog` feature to no longer re-export anything on Windows.
  Previously, using `syslog` on windows would simply fail to compile.
  (thanks [@17dec]!)
- Fix `log_enabled!` macro only checking dispatch at surface and not
  at sub-levels. Actually logging still only does a shallow check, but
  now `log_enabled!()` should be actually accurate.

0.5.7 (2018-11-11)
==================

- Fix colored log level display to honor formatting flags such as "{:>5}"
  (thanks [@ExpHP]!)

0.5.6 (2018-06-19)
==================

- Add another fuller example for colored logging (thanks [@digitalatigid]!)
- Add support for syslog version 4.0.0 under feature flag `syslog-4`.
  - Does not remove syslog-3 support
  - Includes support for RFC5424 formatting, but requires manually
    transforming the log record into the key/value pairs syslog
    expects.
- Add shorthand for calling an arbitrary function as a logging backend

0.5.5 (2018-03-25)
==================

- Add a log handler for logging into an arbitrary `Write` object. (thanks [@vorner]!)

0.5.4 (2018-02-17)
==================

- Add a log handler which panics on all messages. This can be used in
  test configurations to turn warning or error messages into hard
  errors.
- meta: add test coverage reporting via tarpaulin and coveralls

0.5.3 (2018-02-04)
==================

- Add support for `Display::fmt` implementations which call the global
  logger via a 'meta-logging-in-format' flag. (thanks [@jakunar]!)
  - This is disabled by default, see 'meta' module for more info.

0.5.2 (2018-01-02)
==================

- Re-add compatibility for rust versions 1.16.0+, and add CI testing
  with rustc 1.16.0 to ensure this is kept in the future.
- Add some more general documentation updates and clarity increases.
- Add a CHANGELOG.md which mirrors git tag releases.
- Update documentation links to point to docs.rs rather than custom
  hosted documentation.
- Fix ColoredLevelConfig::default being an inherent method rather than
  an implementation of the Default trait.
- Add direct support for the syslog crate under the "syslog-3"
  feature flag.
  - Add a module worth of documentation for using fern with syslog.

0.5.1 (2017-12-26)
==================

- Re-add support for colored log levels with the 'colored' feature
  - Support for this was accidentally dropped in 0.5.0.
- Fix the ability to run tests on windows, and refactor integration
  tests for developer clarity
- Update documentation for clarity

Short list of changes in 0.5.0:
- Updated from log 0.3 to log 0.4. Both are interoperable, but using
  log 0.4 provides a much cleaner log interface for fern to use
  internally
- Removed fern::FernLog.
- Renamed fern::color::ColoredLogLevelConfig to ColoredLevelConfig
- Greatly simplified testing

0.5.0 (2017-12-25)
==================

- Update from log 0.3 to log 0.4. Both log versions are interoperable,
  but line numbers from libraries using 0.4 won't show up in binaries
  with recievers using log 0.4.
  - To clarify: both fern 0.4 and 0.5 will work perfectly with all
    libraries, but line numbers will always be 0 if you use fern 0.4
     and log 0.4.
- Remove fern::FernLog. With log 0.4, log records can be constructed
  directly, and fern loggers can now recieve just a record rather than
  a record and the formatted display string.
- Notable changes in the log crate: log::LogLevel is renamed to
  log::Level, and log::LogLevelFilter is renamed to log::LevelFilter.
- fern::color::ColoredLogLevelConfig has been renamed to
  fern::color::ColoredLevelConfig to match log crate renamings.
- fern tests have been greatly simplified with the new support for
  creating log records manually. it's now possible to just run
  "cargo test" and test all of fern's functionality.

0.4.4 (2017-12-22)
==================

- Add support for coloring log levels in Unix terminals using the
  'colored' crate (thanks [@nihiluis]!)
  - This is enabled via the 'colored' feature, and adds a fern::color
    module.

0.4.3 (2017-09-20)
==================

- Add support for sending to an std::sync::mpsc::Sender as a log output
  (thanks [@gingerDevilish]!)

0.4.2 (2017-08-20)
==================

- Documentation hotfix after a premature release of version 0.4.1

0.4.1 (2017-08-20)
==================

- Lots of documentation tweaks and reworking
- Add CONTRIBUTING file and update README to invite new contributors
- Improve example application to be more realistic
- A few small internal improvements, mostly code cleanup here

0.4.0 (2017-05-09)
==================

- Rework API surface to be builder-based for simpler configuration
  - Rename DispatchConfig to Dispatch, OutputConfig to Output and
    FernLogger to FernLog

- Rework inner log structure for more efficiency
  - Different outputs are now stored in an `enum` rather than every
    sublogger being a Box<FernLog> with dynamic dispatch
  - Remove LogError; handle errors within individual loggers now - and
    only within loggers which actually need it
  - Remove unnecessary wrapping of streams with an Arc (now just uses
    Mutex for File streams)
  - Remove unnecessary wrapping of Stdout and Stderr streams with a
    Mutex, when they are already synchronized
  - Pass around just &fmt::Arguments + &log::LogRecord instead of
    passing each individual LogRecord part

- Move opening of files and stdout/stderr from configuration
  "building" to configuring
  - Instead of taking OpenOptions, log configuration now just takes an
    already-opened std::io::File object
  - fern::InitError is now a convenience API, and is never returned
    from any fern APIs

- Redo formatting to work without allocation - formatting closures now
  finish with a callback rather than returning a value
- Update examples to use `chrono` instead of the `time` crate
  - This removes another extra allocation - chrono can format time
    directly to a writer, without allocating intermediate the result
    to a String

- Add much more documentation: almost every builder method has a full
  example, and all features should be thoroughly explained
- Add appveyor and travis-ci badges to README and Cargo.toml

0.3.5 (2015-05-06)
==================

- Build changes to .travis.yml
- Add html_root_url doc attribute
- Add file_with_line_sep and file_with_options_and_line_sep
  configuration construction options to allow specifying a line
  separator other than the default '\n'

0.3.4 (2015-04-16)
==================

- Update for rustc version e9080ec39 (1.0.0-beta.2)
  - Update to use no_test to ignore doc tests, rather than ignore
  - Remove all stability attributes on public types
  - Add rust version matrix for testing on travis, to test on beta as
    well as nightly builds

0.3.3 (2015-04-03)
==================

- Update for rustc version 9854143cb (1.0.0-beta)
  - Derive Clone for all types deriving Copy
  - Update docs a bit for that switch to `time` crate
- Switch to time crate instead of chrono for tests, as chrono hasn't
  updated for rustc 1.0.0-beta yet.
- Instead of implementing a sudo-time crate as a workaround for
  https://github.com/rust-lang/cargo/issues/1474, just disable the doc
  test, and copy the code to a separate file in tests/

0.3.2 (2015-04-03)
==================

- Update to rustc version 2e3b0c051
  - Add a workaround for
    https://github.com/rust-lang/cargo/issues/1474 in doc tests
  - Implement From for errors instead of FromError
  - Remove now unrequired feature gate
- Implement error::Error for error types

0.3.1 (2015-03-26)
==================

- Updates to rustc version 27901849e

0.3.0 (2015-03-25)
==================

- Updates to rustc version 123a754cb
- Updates to log version 0.3.0
- Reworks fern::OutputConfig to be a struct with functions to
  construct configurations, rather than an enum with variants for each
  configuration.
  - This is a breaking change, as all constructors on
    fern::OutputConfig have been renamed from UpperCase to lower_case.
  - This also now allows fern::OutputConfig to be constructed with
    anything which implements `AsRef<path::Path>`.
    - For example, `fern::OutputConfig::file("some-file.log")` works,
      without having to construct a Path or PathBuf manually.

0.2.1 (2015-03-19)
==================

- Updates to rustc version 3e4be02b8
- Updates documentation

0.2.0 (2015-03-08)
==================

This version reworks the public API in order to turn fern into a
backend to the `log` crate.

API Changes:
- Remove the `local` module, as the `log` crate now handles storing a
  global logger.
- fern::Logger *must* now be Sync + Send
- BoxedLogger and ArcLogger typedefs are removed, due to writing `+
  Sync + Send` no longer being required
 - Now everything just uses Box<Logger>
- Level is removed, in favor of using log::LogLevel and
  log::LogLevelFilter
- LoggerConfig is renamed into DispatchConfig
- Rename `Error` to `LogError`
  - Implement `fmt::Display` for `LogError`
- A new `Formatter` type is added for formatting closures. It also now
  takes a &log::LogLocation parameters as well.
- OutputConfig::Parent is renamed into OutputConfig::Child, this seems
  to make more sense, given that you can have any number of children
- Logger::log() now takes (&str, &log::LogLevel, &log::LogLocation)
  instead of (&fern::Level, &str)
- Add an `IntoLog` trait which DispatchConfig and OutputConfig
  implement (instead of having `into_logger()` on each of them.
  - Add an `into_log()` method to the IntoLog trait that turns a log
    configuration into a `log::Log` (as apposed to `fern::Logger`)
  - Rename `IntoLog.into_logger()` to `IntoLog.into_fern_logger()` in
    order to differentiate from the `into_log()` method.
- Add a `fern::init_global_logger()` method which sets the global
  `log` crate logger from a log configuration
- Add an `InitError` error which is used by `init_global_logger()` for
  either an IO error or `log::SetLoggerError`
- Update everything to use the new io and path modules
- Add a `FileOptions` option to `OutputConfig` which allows for
  specifying an `OpenOptions` for opening the log file with

Additional Changes:
- The docs have been rewritten to be up to date with all the above
  changes
  - The code snippets in the docs are now all tested! This is instead
    of having `no_test` and not having fully workable code examples.
- There is a new `tests/lib.rs` file which contains tests for
  initializing fern and log filtering with different log levels.

0.1.12 (2015-02-21)
===================

- Fixes compile warnings and errors for rustc version 522d09dfe
  (thanks [@gareins]!)
 - Adds static life bound
 - Switches to using old_path feature instead of path feature

0.1.11 (2015-02-13)
===================

- Fixes small documentation error
- Fixes compile errors in rustc version 3ef8ff1f8

0.1.10 (2015-02-03)
===================

- Finishes updating to rustc version eaf4c5c78
  - Last version compiled, but had many warnings
  - Move all #[experimental] features to #[unstable]
  - Add #![feature(io, core)]
  - Remove unrequired .iter() call

0.1.9 (2015-02-03)
==================

- Updates to rustc version eaf4c5c78
  - Changes all usages of std::io to std::old_io

0.1.8 (2015-01-27)
==================

- Updates to rustc version 458a6a2f6

0.1.7 (2015-01-09)
==================

- Update to latest rustc (44a287e6e)

0.1.6 (2015-01-07)
==================

This update mainly just cleans stuff up and updates for the latest
rustc (ea6f65c5f)

- Update to using f.write_str(... instead of write!(f, "{}", ...) for
  simplicity
- Update to use (closure)(...) instead of closure.call((...)) because
  directly calling works now
- Remove #![feature()] attributes for unboxed_closures and
  old_orphan_check, as they are no longer required.

0.1.5 (2015-01-05)
==================

- Updates for the latest rustc version, ad9e75938.
- Fixes all lines which go past the 99 character line limit.


0.1.4 (2015-01-01)
==================

This version is *not* backwards compatible. The change was necessary
for the latest rust update however, so only a minor version increment
was added.

- Changes from using IoResult<()> to Result<(), fern::Error> for
  return types from logging operations.
- Updates for latest rustc

0.1.3 (2014-12-27)
==================

- Adds a new public module, local, which stores a thread-local logger.
- Adds a new logger 'NullLogger', which does nothing with logged
  mesages.
- Fixes WriterLogger to append to opened files instead of overwriting.
- Adds a ton more documentation

0.1.2 (2014-12-24)
==================

- Adds type aliases BoxedLogger and ArcLogger, which resolve to
  `Box<Logger + Sync + Send>` and
  `sync::Arc<Box<Logger + Sync + Send>>` respectively.

0.1.1 (2014-12-22)
==================

- Adds a workaround for a bug introduced a compiler update.

0.1.0 (2014-12-19)
==================

First release, version 0.1.0.


[reopen]: https://github.com/vorner/reopen
[@gareins]: https://github.com/gareins
[@gingerDevilish]: https://github.com/gingerDevilish
[@nihiluis]: https://github.com/nihiluis
[@jakunar]: https://github.com/jakunar
[@vorner]: https://github.com/vorner
[@digitalatigid]: https://github.com/digitalatigid
[@ExpHP]: https://github.com/ExpHP
[@17dec]: https://github.com/17dec
[@tanujitghosh]: https://github.com/tanujitghosh
[@itkovian]: https://github.com/itkovian
[@tymcauley]: https://github.com/tymcauley
[@Songtronix]: https://github.com/Songtronix
[@dekellum]: https://github.com/dekellum
[@Palladinium]: https://github.com/Palladinium
[@sourcefrog]: https://github.com/sourcefrog
[@autarch]: https://github.com/autarch
[@vorner]: https://github.com/vorner
[@EasyPost]: https://github.com/EasyPost
