Seelog
=======

Seelog is a powerful and easy-to-learn logging framework that provides functionality for flexible dispatching, filtering, and formatting log messages.
It is natively written in the [Go](http://golang.org/) programming language. 

[![Build Status](https://drone.io/github.com/cihub/seelog/status.png)](https://drone.io/github.com/cihub/seelog/latest)

Features
------------------

* Xml configuring to be able to change logger parameters without recompilation
* Changing configurations on the fly without app restart
* Possibility to set different log configurations for different project files and functions
* Adjustable message formatting
* Simultaneous log output to multiple streams
* Choosing logger priority strategy to minimize performance hit
* Different output writers
  * Console writer
  * File writer 
  * Buffered writer (Chunk writer)
  * Rolling log writer (Logging with rotation)
  * SMTP writer
  * Others... (See [Wiki](https://github.com/cihub/seelog/wiki))
* Log message wrappers (JSON, XML, etc.)
* Global variables and functions for easy usage in standalone apps
* Functions for flexible usage in libraries

Quick-start
-----------

```go
package main

import log "github.com/cihub/seelog"

func main() {
    defer log.Flush()
    log.Info("Hello from Seelog!")
}
```

Installation
------------

If you don't have the Go development environment installed, visit the 
[Getting Started](http://golang.org/doc/install.html) document and follow the instructions. Once you're ready, execute the following command:

```
go get -u github.com/cihub/seelog
```

*IMPORTANT*: If you are not using the latest release version of Go, check out this [wiki page](https://github.com/cihub/seelog/wiki/Notes-on-'go-get')

Documentation
---------------

Seelog has github wiki pages, which contain detailed how-tos references: https://github.com/cihub/seelog/wiki

Examples
---------------

Seelog examples can be found here: [seelog-examples](https://github.com/cihub/seelog-examples)

Issues
---------------

Feel free to push issues that could make Seelog better: https://github.com/cihub/seelog/issues

Changelog
---------------

* **v2.5** : Interaction with other systems. Part 2: custom receivers
    * Finished custom receivers feature. Check [wiki](https://github.com/cihub/seelog/wiki/custom-receivers)
    * Added 'LoggerFromCustomReceiver'
    * Added 'LoggerFromWriterWithMinLevelAndFormat'
    * Added 'LoggerFromCustomReceiver'
    * Added 'LoggerFromParamConfigAs...' 
* **v2.4** : Interaction with other systems. Part 1: wrapping seelog
    * Added configurable caller stack skip logic
    * Added 'SetAdditionalStackDepth' to 'LoggerInterface'
* **v2.3** : Rethinking 'rolling' receiver
    * Reimplemented 'rolling' receiver
    * Added 'Max rolls' feature for 'rolling' receiver with type='date'
    * Fixed 'rolling' receiver issue: renaming on Windows
* **v2.2** : go1.0 compatibility point [go1.0 tag]
    * Fixed internal bugs
    * Added 'ANSI n [;k]' format identifier:  %EscN
    * Made current release go1 compatible 
* **v2.1** : Some new features
    * Rolling receiver archiving option.
    * Added format identifier: %Line
    * Smtp: added paths to PEM files directories
    * Added format identifier: %FuncShort
    * Warn, Error and Critical methods now return an error
* **v2.0** : Second major release. BREAKING CHANGES.
    * Support of binaries with stripped symbols
    * Added log strategy: adaptive
    * Critical message now forces Flush()
    * Added predefined formats: xml-debug, xml-debug-short, xml, xml-short, json-debug, json-debug-short, json, json-short, debug, debug-short, fast
    * Added receiver: conn (network connection writer)
    * BREAKING CHANGE: added Tracef, Debugf, Infof, etc. to satisfy the print/printf principle
    * Bug fixes
* **v1.0** : Initial release. Features:
    * Xml config
    * Changing configurations on the fly without app restart
    * Contraints and exceptions
    * Formatting
    * Log strategies: sync, async loop, async timer
    * Receivers: buffered, console, file, rolling, smtp



