SeasLog
======
[![Build Status](https://travis-ci.org/SeasX/SeasLog.svg?branch=master)](https://travis-ci.org/SeasX/SeasLog)
[![Build status](https://ci.appveyor.com/api/projects/status/xkf8y7msk7kskon2?svg=true)](https://ci.appveyor.com/project/Neeke/seaslog)
An effective,fast,stable log extension for PHP
@author Chitao.Gao [neeke@php.net]
[Documentation On php.net](http://php.net/SeasLog)
[中文文档](https://github.com/SeasX/SeasLog/blob/master/README_zh.md)
> ---
- **[Synopsis](#synopsis)**
- **[Why use seaslog](#why-use-seaslog)**
- **[What is provided at present](#what-is-provided-at-present)**
- **[What is the target](#what-is-the-target)**
- **[Install](#install)**
- **[Make Install SeasLog](#make-Install-SeasLog)**
- **[seaslog.ini](#seaslogini)**
- **[Custom log template](#custom-log-template)**
- [Log template overview](#log-template-overview)
- [Default variable table](#default-variable-table)
- **[Use age](#use-age)**
- **[Constants and functions](#constants-and-functions)**
- [Constant list](#constant-list)
- [Function list](#function-list)
- **[PHP Re result](#php-re-result)**
- **[The useage of seaslog logger](#the-useage-of-seaslog-logger)**
- [Get and set base path](#get-and-set-base-path)
- [Get and set logger](#get-and-set-logger)
- [Fast write log](#fast-write-log)
- [Data format when sent by TCP or UDP](#data-format-when-sent-by-tcp-or-udp)
- [Manually release stream flow from logger](#manually-release-stream-flow-from-logger)
- **[The useage of SeasLog Analyzer](#the-useage-of-seaslog-analyzer)**
- [Fast count some type of log count value](#fast-count-some-type-of-log-count-value)
- [Acquisit some type of log list](#acquisit-some-type-of-log-list)
- **[Using seaslog to conduct healthy warning](#using-seaslog-to-conduct-healthy-warning)**
- [Warning configuration](#warning-configuration)
- [Crontab configuration](#crontab-configuration)
- **[Companies are now known to use](#companies-are-now-known-to-use)**
- [List of companies](#list-of-companies)
- [Accepted donations](#accepted-donations)
> ---
## Synopsis
### Why use seaslog
The log journal,which is usually the operate record of the system,software and the application record. Through the analysis of the log,it can facilitate users to understand the operation of the system,software and the application situation. If your application log is rich enough,it can also analyze the previous use’s operation behavior,type ,regional distribution or other more information. The application log also points the multiple levels at the same time, you can easily get the application analysis of health status, timely find problems and quick positioning, and solve the problem, remedy the loss.
The error_log, syslog function which built in PHP is powerful and excellent performance, but due to various defects (error_log have no error level, no fixed format, syslog regardless of module, and mix with system log ), reducing a lot of flexibility , and can't meet the application requirements.
The good news is that there are a number of third-party log class library established to make up for the defects, such as log4php, plog, Analog (of course, there are many applications in the project development of the log class). Of which [log4php](http://logging.apache.org/log4php/) is the most famous and excellent design, perfect document format , powerful function,which is recommanded.
But log4php did very badly in terms of performance, below chart is SeasLog with log4php ab concurrent performance test (test environment: Ubuntu12.04 standalone, I3 CPU, memory16g,hard disk SATA 7200) :
![SeasLogVSlog4php](https://raw.githubusercontent.com/SeasX/SeasLog/master/tests/SeasLogVSlog4php.png)
So is there a log of libraries meet the following requirements:
* Modules, classification
* Simple configuration(preferably without configuration)
* Clear log format and easy understanding
* Simple application and well performance
`SeasLog` just meet these demands.
### What is provided at present
* In the PHP project, record the log specification and repidly.
* Configure the default log directory and module
* Specified log directory and capture current configuration
* Preliminary analysis of the early warning framework
* Efficient log buffer and convenient buffer debug
* Follow the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) log interface specification
* Automatically record error information
* Automatically record abnormal information
* Support Connect the TCP port, send with RFC5424
* Support Connect the UDP port, send with RFC5424
* Support RequestId differentiated requests
* Support for log template customizations
### What is the target
* Convenient, standarded log records
* Efficient mass log analysis
* Configurable, multi-channel log warning
## Install
### Make Install SeasLog
```sh
$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
```
### PECL Install SeasLog
```sh
$ pecl install seaslog
```
### Use SeasLog with Windows
Go to PECL/SeasLog and find .dll to install. [PECL/SeasLog Windows Dll](http://pecl.php.net/package/SeasLog/1.8.4/windows)
### seaslog.ini
```conf
[SeasLog]
;configuration for php SeasLog module
extension = seaslog.so
;Default Log Base Path
seaslog.default_basepath = "/var/log/www"
;Default log file prefix, for example "app-" default empty string
seaslog.default_file_prefix = ""
;Default log file datetime separator, for example "-" default empty string
seaslog.default_file_datetime_separator=""
;Default Logger Path
seaslog.default_logger = "default"
;The DateTime Style. Default "Y-m-d H:i:s"
seaslog.default_datetime_format = "Y-m-d H:i:s"
;Default Log template.
;Default "%T | %L | %P | %Q | %t | %M"
seaslog.default_template = "%T | %L | %P | %Q | %t | %M"
;Switch use the logger with folder.
;1-Y(Default) 0-N
seaslog.disting_folder = 1
;Switch use the logger with type.
;1-Y 0-N(Default)
seaslog.disting_type = 0
;Switch use the logger with hour.
;1-Y 0-N(Default)
seaslog.disting_by_hour = 0
;Switch use the log buffer with memory.
;1-Y 0-N(Default)
seaslog.use_buffer = 0
;The buffer size
seaslog.buffer_size = 100
;disable buffer in cli
;1-Y 0-N(Default)
seaslog.buffer_disabled_in_cli = 0
;Record logger level.
;0-EMERGENCY 1-ALERT 2-CRITICAL 3-ERROR 4-WARNING 5-NOTICE 6-INFO 7-DEBUG 8-ALL
;Default 8 (All of them).
;
; Tips: The configuration item has changed since the 1.7.0 version.
; Before the 1.7.0 version, the smaller the value, the more logs are taken according to the level:
; 0-all 1-debug 2-info 3-notice 4-warning 5-error 6-critical 7-alert 8-emergency
; Before the 1.7.0 version, Default 0 (All of them).
seaslog.level = 8
;Log function recall depth
;Will affected variable `LineNo` in `%F`
;Default 0
seaslog.recall_depth = 0
;Automatic Record notice with default logger
;1-Y 0-N(Default)
seaslog.trace_notice = 0
;Automatic Record warning with default logger
;1-Y 0-N(Default)
seaslog.trace_warning = 0
;Automatic Record final error with default logger.
;1-Y(Default) 0-N
seaslog.trace_error = 1
;Automatic Record exception with default logger.
;1-Y 0-N(Default)
seaslog.trace_exception = 0
;Switch the Record Log Data Store.
;1File 2TCP 3UDP (Switch default 1)
seaslog.appender = 1
;Record Log Retry Count
;Default 0 (Do Not Retry)
seaslog.appender_retry = 0
;If you use Record TCP or UDP, configure this remote ip.
;Default "127.0.0.1"
seaslog.remote_host = "127.0.0.1"
;If you use Record TCP or UDP, configure this remote port.
;Default 514
seaslog.remote_port = 514
;If you use Record TCP or UDP, configure this remote timeout.
;Default 1 second
seaslog.remote_timeout = 1
;Trim the \n and \r in log message.
;1-On 0-Off(Default)
seaslog.trim_wrap = 0
;Switch throw S