1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/neeke-SeasLog

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

SeasLog

Статус сборки Статус сборки

Эффективное, быстрое и стабильное расширение для логирования в PHP

@Autowired Чито Гао [neeke@php.net]

Документация на php.net

Китайская версия документации> ---

Почему использовать SeasLog

Журнал логов, который обычно является операционной записью системы, программного обеспечения и приложений. Анализ логов позволяет пользователям лучше понять работу системы, программного обеспечения и приложений. Если ваши логи приложения достаточно подробны, вы также можете анализировать поведение пользователей в прошлом, типы, региональное распределение или другую информацию. Логи приложения указывают на несколько уровней одновременно, что позволяет легко получить анализ состояния здоровья приложения, своевременно находить проблемы и быстро их локализовать, а затем решать проблему и восстановить потерянные данные. Файл error_log, а также встроенные в PHP функции syslog мощны и имеют отличные характеристики производительности, но из-за различных недостатков (например, отсутствие уровня ошибок в error_log, отсутствие фиксированного формата, независимость модулей в syslog и смешивание с системными журналами), значительно снижаются гибкость и возможности удовлетворять требованиям приложений.Хорошая новость заключается в том, что существует множество сторонних библиотек журналирования, созданных для компенсации этих недостатков, таких как log4php, plog, Analog (конечно, многие проекты используют свои собственные классы журналирования). Из которых [log4php] является наиболее известной и хорошо спроектированной, имеет идеальное форматирование документов, мощные функции и рекомендована для использования.Однако log4php демонстрирует очень плохую производительность. Ниже приведена диаграмма сравнения производительности SeasLog и log4php при тестировании параллельных запросов (тестовая среда: Ubuntu 12.04, процессор Intel i3, память 16 ГБ, жесткий диск SATA 7200):

Итак, есть ли библиотеки журналирования, которые удовлетворяют следующим требованиям:

  • Модульность и классификация
  • Простое конфигурирование (желательно без необходимости конфигурации)
  • Ясное форматирование журнала и простота понимания
  • Простое использование и хорошая производительность

SeasLog полностью соответствует этим требованиям.

Что предоставляется сейчас

  • В проектах на PHP запись логов согласно спецификации и быстрый доступ.
  • Настройка по умолчанию директорий логов и модулей.
  • Указание директорий логов и захват текущей конфигурации.
  • Начальный анализ раннего предупреждения.
  • Эффективный буфер логов и удобство отладки буфера.
  • Соответствие спецификации интерфейса логгера PSR-3.
  • Автоматическая регистрация информации об ошибках.
  • Автоматическая регистрация информации об аномалиях.
  • Поддержка соединения с портом TCP и отправки данных в соответствии с RFC5424.
  • Поддержка соединения с портом UDP и отправки данных в соответствии с RFC5424.
  • Поддержка различия запросов через RequestId.
  • Поддержка кастомизации шаблонов логов.### Цели развития
  • Конкретное, стандартизированное журналирование.
  • Эффективное массовое анализирование логов.
  • Настраиваемые, многоканальные системы предупреждений.

Установка

Установка SeasLog

$ /путь/до/phpize
$ ./configure --with-php-config=/путь/до/php-config
$ make && make install

Установка SeasLog с помощью PECL

$ pecl install seaslog

Использование SeasLog в Windows

Перейдите на страницу PECL/SeasLog и найдите .dll для установки. PECL/SeasLog Windows DLL

Конфигурация seaslog.ini

[SeasLog]
; конфигурация для модуля php SeasLog
extension = seaslog.so

; Основной путь логов
seaslog.default_basepath = "/var/log/www"

; Префикс файла логов по умолчанию, например "app-", по умолчанию пустая строка
seaslog.default_file_prefix = ""

; Разделитель времени в имени файла логов по умолчанию, например "-", по умолчанию пустая строка
seaslog.default_file_datetime_separator = ""

; Имя по умолчанию для логгера
seaslog.default_logger = "default"

; Формат даты и времени по умолчанию
seaslog.default_datetime_format = "Y-m-d H:i:s"

; Шаблон записи логов по умолчанию
; По умолчанию "%T | %L | %P | %Q | %t | %M"
seaslog.default_template = "%T | %L | %P | %Q | %t | %M"

; Отключение использования папок для логгеров
; 1-Да (по умолчанию) 0-Нет
seaslog.disting_folder = 1

; Отключение использования типов для логгеров
; 1-Да 0-Нет (по умолчанию)
seaslog.disting_type = 0

; Отключение использования часов для логгеров
; 1-Да 0-Нет (по умолчанию)
seaslog.disting_by_hour = 0

; Отключение использования буферизации в памяти
; 1-Да 0-Нет (по умолчанию)
seaslog.use_buffer = 0
```;Размер буфера
seaslog.buffer_size = 100

;Отключение буферизации в командной строке
;1-Да 0-Нет (по умолчанию)
seaslog.buffer_disabled_in_cli = 0

;Уровень записи логов
;0-ЭМЕРГЕНСИ 1-АЛЭРТ 2-КРИТИЧЕСКИЙ 3-ОШИБКА 4-ПРЕДУПРЕЖДЕНИЕ 5-ИНФОРМАЦИЯ 6-ИНФО 7-ДИАГНОСТИКА 8-ВСЕ
;По умолчанию 8 (все уровни)
;
;Подсказка: Настройка уровня была изменена начиная с версии 1.7.0.
;До версии 1.7.0 значение меньшее — больше записей по уровню: 
;0-все 1-диагностика 2-инфо 3-информация 4-предупреждение 5-ошибка 6-критический 7-алерт 8-эмерджинси
;До версии 1.7.0, По умолчанию 0 (все уровни).
seaslog.level = 8

;Глубина вызова функции для получения номера строки
;Влияет на переменную `LineNo` в `%F`
;По умолчанию 0
seaslog.recall_depth = 0

;Автоматическая запись сообщений типа notice с использованием дефолтного логгера
;1-Да 0-Нет (по умолчанию)
seaslog.trace_notice = 0

;Автоматическая запись сообщений типа warning с использованием дефолтного логгера
;1-Да 0-Нет (по умолчанию)
seaslog.trace_warning = 0

;Автоматическая запись конечных ошибок с использованием дефолтного логгера
;1-Да (по умолчанию) 0-Нет
seaslog.trace_error = 1

;Автоматическая запись исключений с использованием дефолтного логгера
;1-Да 0-Нет (по умолчанию)
seaslog.trace_exception = 0

;Выбор метода хранения данных логов
;1-Файл 2-TCP 3-UDP (по умолчанию 1)
seaslog.appender = 1

;Запись количества попыток повторной отправки журнала
;По умолчанию 0 (повторы отключены)
seaslog.appender_retry = 0;Если используется запись через TCP или UDP, настройте этот удаленный IP.  
;По умолчанию "127.0.0.1"  
seaslog.remote_host = "127.0.0.1"  

;Если используется запись через TCP или UDP, настройте этот удаленный порт.  
;По умолчанию 514  
seaslog.remote_port = 514  

;Если используется запись через TCP или UDP, настройте это время ожидания удаленного соединения.  
;По умолчанию 1 секунду  
seaslog.remote_timeout = 1  

;Удаление символов новой строки (\n) и возврата каретки (\r) из сообщения журнала.  
;1 - Включено (по умолчанию) / 0 - Отключено  
seaslog.trim_wrap = 0  

;Переключатель выброса исключения SeasLog.  
;1 - Включено (по умолчанию) / 0 - Отключено  
seaslog.throw_exception = 1  

;Переключатель игнорирования предупреждений SeasLog.  
;1 - Включено (по умолчанию) / 0 - Отключено  
seaslog.ignore_warning = 1  

;Переключатель трассировки производительности.  
;1 - Включено / 0 - Отключено (по умолчанию)  
seaslog.trace_performance = 0  

;Сэмпл-рейт трассировки производительности на тысячу.  
;10 (по умолчанию). 10 сэмплов на тысячу  
seaslog.trace_performance_sample_rate = 10  

;Уровень глубины начала трассировки производительности.  
;1 (по умолчанию)  
seaslog.trace_performance_start_depth = 1  

;Максимальная глубина трассировки производительности.  
;5 (по умолчанию)  
seaslog.trace_performance_max_depth = 5  

;Максимальное количество функций на каждый уровень в порядке убывания времени выполнения для трассировки производительности.  
;По умолчанию верхняя граница равна 5  
seaslog.trace_performance_max_functions_per_depth = 5;Порог записи текущего времени выполнения запроса для трассировки производительности.  
;Только если время выполнения запроса больше этого значения.  
;1000 мс (по умолчанию)  
seaslog.trace_performance_min_wall_time = 1000  

;Порог записи времени выполнения каждого метода для трассировки производительности.  
;Только если время выполнения каждого метода больше этого значения.  
;10 мс (по умолчанию)  
seaslog.trace_performance_min_function_wall_time = 10

```plaintext
> `seaslog.distinguishing_folder = 1` Переключатель использования логгера Distinguishing по папкам. Это значит, что SeasLog будет создавать файлы по папкам, а при выключенном режиме — использовать подчеркивание для разделения имени логгера и времени, как по умолчанию (например, default_20180211.log).

> `seaslog.distinguishing_type = OnClickListener` Переключатель использования логгера Distinguishing по типам. Это значит, что SeasLog будет создавать файлы по типам (например, info, warn, error и так далее).

> `seaslog.distinguishing_by_hour = 1` Переключатель использования логгера Distinguishing по часам. Это значит, что SeasLog будет создавать файлы каждые полчаса.
```> `seaslog.use_buffer = 1` Переключатель использования буфера конфигурации. Буфер по умолчанию выключен. При активированном режиме буфера SeasLog будет предварительно записывать журналы в память, а затем перезаписывать их в хранилище данных при завершении работы PHP (RSHUTDOWN или MSHUTDOWN).

seaslog.buffer_size = 100 Установите размер буфера в 100. По умолчанию значение буферизации равно 0, что означает отсутствие использования буфера. Если размер буфера больше 0, SeasLog будет перезаписываться в хранилище данных при достижении количества заранее записанных логов в памяти значения этого размера буфера, после чего будет очищена память. ```> seaslog.buffer_disabled_in_cli = 1 Включите конфигурацию отключения буфера в командной строке. По умолчанию этот переключатель выключен. Если включить переключатель отключения буфера и запустить в командной строке, настройка `seaslog.use_buffer` будет игнорирована, а данные будут сразу записываться в хранилище.

seaslog.level = 8 Уровень журналирования по умолчанию. Значение по умолчанию равно 8, что означает, что SeasLog будет регистрировать все уровни.

seaslog.level = 0 SeasLog будет регистрировать уровень INFO.

seaslog.level = 1 SeasLog будет регистрировать уровни INFO, ALARM.

seaslog.level = 2 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL.

seaslog.level = 3 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL, ERROR.

seaslog.level = 4 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL, ERROR, WARNING.

seaslog.level = 5 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL, ERROR, WARNING, NOTICE.

seaslog.level = 6 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL, ERROR, WARNING, NOTICE, DEBUG.

seaslog.level = 7 SeasLog будет регистрировать уровни INFO, ALARM, CRITICAL, ERROR, WARNING, NOTICE, DEBUG, TRACE.> seaslog.throw_exception = 1 Открывает исключение, которое выбрасывает SeasLog само. При блокировке директорий или портов приемника сервера выбрасывается исключение; если доступ открыт — исключение не выбрасывается.> seaslog.ignore_warning = 1 Открывает предупреждение для игнорирования SeasLog самой себя. При блокировке директорий или портов приемника сервера они игнорируются; если закрыто — выбрасывается предупреждение. > seaslog.trace_performance = 1 Включает отслеживание производительности. Лог производительности может выглядеть следующим образом:

2019-01-30 11:46:53 | INFO | 91390 | 5c518ea46e010 | 1548848813.299 | {"main()":{"wt":8848,"mu":20712},"1":[{"cm":"Class0::Method0","ct":2,"wt":2007,"mu":192},{"cm":"Class1::Method1","ct":1,"wt":1002,"mu":192},{"cm":"Class2::Method2","ct":1,"wt":1001,"mu":192},{"cm":"Class3::Method3","ct":1,"wt":1000,"mu":192},{"cm":"Class4::Method4","ct":1,"wt":1000,"mu":192}],"2":[{"cm":"Class5::Method5","ct":1,"wt":1000,"mu":192}],"3":[{"cm":"Class5::Recursion","ct":1,"wt":1000,"mu":3248}],"4":[{"cm":"Class5::Recursion","ct":1,"wt":1000,"mu":2952}],"5":[{"cm":"Class5::Recursion","ct":1,"wt":1000,"mu":2656}]}

cm => имя_функции (ClassName::MethodName)
wt => время_выполнения (мс)
mu => использование_памяти (байты)
ct => количество_вызовов_функции

### Пользовательский шаблон лога
Многие пользователи обратили внимание на необходимость использования пользовательских шаблонов логов,
поэтому начиная с версии 1.7.2, `SeasLog` предоставляет возможность пользователям настраивать шаблоны логов.

При этом можно использовать множество заранее установленных переменных, которые встроены в `SeasLog`,
пожалуйста, обратитесь к [Таблице переменных по умолчанию](#default-variable-table).

#### Обзор шаблона лога
* По умолчанию используется шаблон лога: `seaslog.default_template = "%T | %L | %P | %Q | %t | %M"`,
* что означает, что стиль лога по умолчанию выглядит так: `{dateTime} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}`
```* Если вы создадите свой шаблон лога, например: `seaslog.default_template = "[%T]:%L %P %Q %t %M"`,
* то это будет означать, что стиль лога будет таким: `[ {dateTime} ]:{level} {pid} {uniqid} {timeStamp} {logInfo}`#### Таблица переменных по умолчанию
`SeasLog` предоставляет следующие переменные по умолчанию, которые могут использоваться непосредственно в шаблоне лога и заменяться соответствующими значениями при генерации лога.
* `%L` — Уровень.
* `%M` — Сообщение.
* `%T` — Дата и время. Например, `2017-08-16 19:15:02`, зависит от `seaslog.default_datetime_format`.
* `%t` — Временная метка. Например, `1502882102.862`, точность до миллисекунды.
* `%Q` — Id запроса. Для отличия одного запроса от другого, если функция `SeasLog::setRequestId($string)` не была вызвана, используется уникальное значение, сгенерированное встроенной функцией `static char *get_uniqid()` при инициализации запроса.
* `%H` — Имя хоста.
* `%P` — Id процесса.
* `%D` — Домен:порт. Например, `www.cloudwise.com:80`; При работе в командной строке, такой как `cli`.
* `%R` — URI запроса. Например, `/app/user/signin`; При работе в командной строке, это скрипт индекса, такой как `CliIndex.php`.
* `%m` — Метод запроса. Например, `GET`; При работе в командной строке, это скрипт команды, такой как `/bin/bash`.
* `%I` — IP клиента; При работе в командной строке, это `local`. Приоритет значений: `HTTP_X_REAL_IP > HTTP_X_FORWARDED_FOR > REMOTE_ADDR`
* `%F` — Название файла:номер строки. Например, `UserService.php:118`.
* `%U` — Использование памяти. байты. Вызов `zend_memory_usage`.
* `%u` — Максимальное использование памяти. байты. Вызов `zend_memory_peak_usage`.
* `%C` — Класс::действие. Например, `UserService::getUserInfo`. В процедурном программировании, это переходит к имени функции.
* `%B` — Базовый путь.Например, `/var/log/www`, зависит от `seaslog.default_basepath` и `setBasePath`.

```## Использование уровня логгирования```
### Константы и функции
#### Список констант
`SeasLog использует восемь уровней логгирования.`  
##### SEASLOG_DEBUG       
* "DEBUG"       - Подробная информация отладки. Детальное описание событий.
##### SEASLOG_INFO
* "INFO"        - Интересные события. Подчеркивает процесс выполнения приложения.
##### SEASLOG_NOTICE
* "NOTICE"      - Обычные, но значимые события. Информация более важна, чем уровень INFO во время выполнения.
##### SEASLOG_WARNING
* "WARNING"     - Исключительные случаи, которые не являются ошибками. Внезапные события, требующие внимания и исправления.
##### SEASLOG_ERROR
* "ERROR"       - Ошибки выполнения, которые не требуют немедленных действий, но обычно должны быть учтены.
##### SEASLOG_CRITICAL
* "CRITICAL"    - Критическое состояние. Нуждается в немедленной корректировке, и компонент программы недоступен.
##### SEASLOG_ALERT
* "ALERT"       - Необходимость немедленных действий. Требуется немедленное внимание со стороны ответственного лица для экстренной корректировки.
##### SEASLOG_EMERGENCY
* "EMERGENCY"   - Система непригодна для использования.

```php
var_dump(SEASLOG_DEBUG, SEASLOG_INFO, SEASLOG_NOTICE);
/*
string('DEBUG') уровень отладки
string('INFO')  уровень информации
string('NOTICE') уровень уведомления
*/
```#### Список функций
`SeasLog` предоставляет набор функций, с помощью которых можно легко получить и установить корневую директорию, директорию модуля логгирования, быстрое записывание и статистику.  
Уверены, что из следующих псевдокомментариев вы сможете быстро получить информацию о функциях, а конкретное использование будет представлено ниже.```php
<?php
/**
 * @author neeke@php.net
 * Date: 14-1-27 16:47
 */
define('SEASLOG_ALL', 'ALL');
define('SEASLOG_DEBUG', 'DEBUG');
define('SEASLOG_INFO', 'INFO');
define('SEASLOG_NOTICE', 'NOTICE');
define('SEASLOG_WARNING', 'WARNING');
define('SEASLOG_ERROR', 'ERROR');
define('SEASLOG_CRITICAL', 'CRITICAL');
define('SEASLOG_ALERT', 'ALERT');
define('SEASLOG_EMERGENCY', 'EMERGENCY');
define('SEASLOG_DETAIL_ORDER_ASC', 1);
define('SEASLOG_DETAIL_ORDER_DESC', 2);
define('SEASLOG_CLOSE_LOGGER_STREAM_MOD_ALL', 1);
define('SEASLOG_CLOSE_LOGGER_STREAM_MOD_ASSIGN', 2);
define('SEASLOG_REQUEST_VARIABLE_DOMAIN_PORT', 1);
define('SEASLOG_REQUEST_VARIABLE_REQUEST_URI', 2);
define('SEASLOG_REQUEST_VARIABLE_REQUEST_METHOD', 3);
define('SEASLOG_REQUEST_VARIABLE_CLIENT_IP', 4);
class SeasLog
{
    public function __construct()
    {
        // Инициализация SeasLog
    }

    public function __destruct()
    {
        // Уничтожение SeasLog
    }

    /**
     * Установка базового пути
     *
     * @param $basePath
     *
     * @return bool
     */
    static public function setBasePath($basePath)
    {
        return TRUE;
    }

    /**
     * Получение базового пути
     *
     * @return string
     */
    static public function getBasePath()
    {
        return 'the base_path';
    }

    /**
     * Установка идентификатора запроса
     *
     * @param string
     *
     * @return bool
     */
    static public function setRequestID($request_id)
    {
        return TRUE;
    }

    /**
     * Получение идентификатора запроса
     *
     * @return string
     */
    static public function getRequestID()
    {
        return uniqid();
    }

    /**
     * Установка логгера
     *
     * @param $module
     *
     * @return bool
     */
    static public function setLogger($module)
    {
        return TRUE;
    }

    /**
     * Ручное освобождение потока логгера
     *
     * @param $model
     * @param $logger
     *
     * @return bool
     */
    static public function closeLoggerStream($model = SEASLOG_CLOSE_LOGGER_STREAM_MOD_ALL, $logger)
    {
        return true;
    }
}
``````markdown
/**
 * Получение последнего логгера
 * @return string
 */
static public function getLastLogger()
{
    return 'последний логгер';
}

/**
 * Установка формата даты и времени
 * @param $format
 *
 * @return bool
 */
static public function setDatetimeFormat($format)
{
    return TRUE;
}

/**
 * Получение формата даты и времени
 * @return string
 */
static public function getDatetimeFormat()
{
    return 'формат даты и времени';
}

/**
 * Установка переменной запроса
 *
 * @param $key
 * @param $value
 *
 * @return bool
 */
static public function setRequestVariable($key, $value)
{
    return true;
}

/**
 * Получение переменной запроса
 *
 * @param $key
 *
 * @return string
 */
static public function getRequestVariable($key)
{
    return '';
}

/**
 * Подсчет всех типов (или типа) строк лога
 * @param string $level
 * @param string $log_path
 * @param null   $key_word
 *
 * @return array | long
 */
static public function analyzerCount($level = 'all', $log_path = '*', $key_word = NULL)
{
    return array();
}

/**
 * Получение логов в виде массива
 *
 * @param        $level
 * @param string $log_path
 * @param null   $key_word
 * @param int    $start
 * @param int    $limit
 * @param        $order SEASLOG_DETAIL_ORDER_ASC(по умолчанию)  SEASLOG_DETAIL_ORDER_DESC
 *
 * @return array
 */
static public function analyzerDetail($level = SEASLOG_INFO, $log_path = '*', $key_word = NULL, $start = 1, $limit = 20, $order = SEASLOG_DETAIL_ORDER_ASC)
{
    return array();
}

/**
 * Получение буфера в памяти в виде массива
 *
 * @return array
 */
static public function getBuffer()
{
    return array();
}
/**
 * Получение состояния включения/отключения буферизации
 *
 * @return bool
 */
static public function getBufferEnabled()
{
    return true;
}

/**
 * Получение количества записей в буфере
 *
 * @return int
 */
static public function getBufferCount()
{
    return 0;
}```markdown
/**
 * Очистка буфера и выгрузка данных в приложение-приёмник
 *
 * @return bool
 */
static public function flushBuffer()
{
    return TRUE;
}

/**
 * Запись отладочного лога
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function debug($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_DEBUG
}

/**
 * Запись информационного лога
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function info($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_INFO
}

/**
 * Запись лога с уведомлением
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function notice($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_NOTICE
}

/**
 * Запись лога с предупреждением
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function warning($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_WARNING
}

/**
 * Запись журнала ошибок
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function error($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_ERROR
}

/**
 * Запись критического журнала
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function critical($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_CRITICAL
}

/**
 * Запись журнала тревоги
 *
 * @param string|array $message
 * @param array        $context
 * @param string       $module
 */
static public function alert($message, array $context = array(), $module = '')
{
    #$level = SEASLOG_ALERT
}
     * Запись журнала чрезвычайной ситуации
     *
     * @param string|array $message
     * @param array        $context
     * @param string       $module
     */
    static public function emergency($message, array $context = [], $module = '')
    {
        #$level = SEASLOG_EMERGENCY
    }

    /**
     * Общая функция записи журнала
     * @param              $level
     * @param string|array $message
     * @param array        $context
     * @param string       $module
     */
    static public function log($level, $message, array $context = [], $module = '')
    {

    }
}

### Результат PHP Re
[SeasLog_PHP_Re_Result](https://github.com/SeasX/SeasLog/blob/master/Specification/SeasLog_PHP_Re_Result.md)

### Использование логгера SeasLog
#### Получение и установка базового пути
```php
$basePath_1 = SeasLog::getBasePath();

SeasLog::setBasePath('/log/base_test');
$basePath_2 = SeasLog::getBasePath();

var_dump($basePath_1,$basePath_2);

/*
string(19) "/log/seaslog-ciogao"
string(14) "/log/base_test"
*/

Используйте функцию SeasLog::getBasePath(), чтобы получить значение seaslog.default_basepath, указанное в конфигурационном файле php.ini (seaslog.ini).

Используйте функцию SeasLog::setBasePath(), чтобы изменить значение, полученное с помощью функции SeasLog::getBasePath().

Получение и установка логгера

$lastLogger_ Yöntem_1 = SeasLog::getLastLogger();

SeasLog::setLogger('testModule/app1');
$lastLogger_2 = SeasLog::getLastLogger();
var_dump($lastLogger_1,$lastLogger_2);
/*
строка(7) "default"
строка(15) "testModule/app1"
*/

Аналогично базовому пути,

Используйте функцию SeasLog::getLastLogger(), чтобы получить значение seaslog.default_logger, которое настроено в php.ini (seaslog.ini).

Используйте функцию SeasLog::setLogger(), чтобы изменить значение функции SeasLog::getLastLogger().

Быстрая запись логов

Мы уже установили basePath и logger, поэтому путь к журналу готов.

logSeasLog будет записывать уровень директории = basePath / logger / {fileName}.log Имя файла журнала начинается с годмесяцдень. Например, если сегодня 02-18-2014, то имя файла будет 20140218.

Помните ли вы параметр seaslog.distinguishing_type в php.ini?

Переключившись на значение по умолчанию seaslog.distinguishing_type = 0, если мы будем использовать SeasLog сегодня, то файл журнала будет иметь вид:

  • LogFile = basePath / logger / 20140218.log

Если seaslog.distinguishing_type = 1, то файл журнала будет выглядеть так:

  • infoLogFile = basePath / logger / 20140218.INFO.log

  • warnLogFile = basePath / logger / 20140218.WARN.log

  • errorLogFile = basePath / logger / 20140218.ERROR.log

Существуют два прототипа функций для записи журналов:

  • SeasLog::log($level, $messages[, $context, $logger])

  • SeasLog::$level($messages[, $context, $logger])

$level - Смотрите вышеупомянутые 8 уровней

$messages - Вы можете использовать две формы данных: строка или массив, причём массив может содержать только одномерный массив.

$context - Принимает только одномерный массив для замены плейсхолдеров в $messages.

$logger - Вы можете временно указать logger для текущего действия без изменения значения метода getLastLogger.


SeasLog::log(SEASLOG_ERROR,'это тест ошибки через ::log');

SeasLog::debug('это отладочное сообщение {userName}',array('{userName}' => 'neeke'));

SeasLog::info('это информационное сообщение');

SeasLog::notice('это сообщение о примечательном событии');
```SeasLog::warning('ваш сайт {website} недоступен, пожалуйста {action} его как можно скорее!', array('{website}' => 'github.com', '{action}' => 'рестарт'));

SeasLog::error('сообщение об ошибке');

SeasLog::critical('что-то критическое произошло');

SeasLog::alert('да это сообщение {messageName}', array('{messageName}' => 'alertMSG'));

SeasLog::emergency('Недавно дом напротив полностью сгорел! {note}', array('{note}' => 'это шутка'));

```php
$aMessages = array('тестовый лог с массива abc {website}', 'тестовый лог с массива def {action}');
$aContent = array('website' => 'github.com', 'action' => 'rboot');
SeasLog::debug($aMessages, $aContent);
/*
Эти функции могут принимать `logger`, который указан третьим параметром всегда.
Подсказка: `last_logger == 'default'` будет использоваться так же как:
SeasLog::setLogger('test/new/path');
SeasLog::error('test error 3');
Значение `logger`, которое указано третьим параметром, будет использовано прямо сейчас, как временный logger, когда вызывается функция SeasLog::setLogger().
*/
```> Стиль журналирования зависит от `seaslog.default_template`.
> По умолчанию `seaslog.default_template = "%T | %L | %P | %Q | %t | %M"`",
> что значит, по умолчанию стиль записи лога такой: `{dateTime} | {level} | {pid} | {uniqid} | {timeStamp} | {logInfo}`.
> О том, как создать пользовательский шаблон лога и использовать таблицу переменных по умолчанию, см. [Пользовательский шаблон лога](#custom-log-template)

```sh
2014-07-27 08:53:52 | ОШИБКА | 23625 | 599159975a9ff | 1406422432.786 | это тестовая ошибка лога
2014-07-27 08:53:52 | ДЕБАГ | 23625 | 599159975a9ff | 1406422432.786 | это тестовый лог neeke debug
2014-07-27 08:53:52 | ИНФО | 23625 | 599159975a9ff | 1406422432.787 | это информационный лог
2014-07-27 08:53:52 | ВНИМАНИЕ | 23625 | 599159975a9ff | 1406422432.787 | это лог в виде сообщения о внимании
2014-07-27 08:53:52 | ПРЕДУПРЕЖДЕНИЕ | 23625 | 599159975a9ff | 1406422432.787 | ваш github.com был недоступен, пожалуйста, перезапустите его как можно скорее!
2014-07-27 08:53:52 | ОШИБКА | 23625 | 599159975a9ff | 1406422432.787 | тестовая ошибка лога
2014-07-27 08:53:52 | КРИТИЧЕСКИЙ | 23625 | 599159975a9ff | 1406422432.787 | что-то было критическим
2014-07-27 08:53:52 | ЭМЕРГЕНЦИЯ | 23625 | 599159975a9ff | 1406422432.787 | Только что дом напротив полностью сгорел! Это шутка
2014-07-27 08:53:52 | ДЕБАГ | 23625 | 599159975a9ff | 1406422432.787 | тестовый лог с массива abc github.com
2014-07-27 08:53:52 | ДЕБАГ | 23625 | 599159975a9ff | 1406422432.787 | тестовый лог с массива def rboot
```#### Формат данных при отправке через TCP или UDP

SeasLog отправляет лог на сервер tcp://remote_host:remote_port или udp://remote_host:remote_port, если `seaslog.appender` настроен на `2 (TCP)` или `3 (UDP)`.
> Когда `SeasLog` отправляет логи на TCP/UDP, стиль лога следует за [RFC5424](http://www.faqs.org/rfcs/rfc5424.html).
> Логи форматируются SeasLog с заголовком отправки: `<PRI>1 {timeStampWithRFC3339} {HostName} {loggerName}[{pid}]: {logInfo}`
> Значение `{logInfo}` зависит от `seaslog.default_template`.

Формат логов наконец был оформлен следующим образом: <15>1 2017-08-27T01:24:59+08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | DEBUG | 21423 | 599157af4e937 | 1466787583.322 | это отладочный лог neeke <14>1 2017-08-27T01:24:59+08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | INFO | 21423 | 599157af4e937 | 1466787583.323 | это информационный лог <13>1 2017-08-27T01:24:59+08:00 vagrant-ubuntu-trusty test/logger[27171]: 2016-06-25 00:59:43 | NOTICE | 21423 | 599157af4e937 | 1466787583.324 | это лог с уведомлением


#### Вручную освобождать потоки логгера
`SeasLog` кэширует открытый поток логгера, чтобы избежать дополнительной нагрузки при создании нового потока. Обработчики будут автоматически закрыты в конце запроса.
Если используется режим командной строки (CLI), процесс также будет автоматически завершен при выходе. Либо можно использовать следующие функции для вручную освобождения потока (функция вручную освобождает поток требует версию SeasLog 1.8.6 или более позднюю).

> Вручную освободить все потоки логгера:
```php
SeasLog::closeLoggerStream();
```или

```php
SeasLog::closeLoggerStream(SEASLOG_CLOSE_LOGGER_STREAM_MOD_ALL);

Вручную освободить указанный поток логгера:

SeasLog::closeLoggerStream(SEASLOG_CLOSE_LOGGER_STREAM_MOD_ASSIGN, 'logger_name');

Использование анализатора SeasLog

Быстрое подсчет количества определённого типа логов

SeasLog использует системный канал (grep -wc) для получения значения счётчика и возвращает его в PHP (массив или целое число).

$countResult_1 = SeasLog::analyzerCount();
$countResult_2 = SeasLog::analyzerCount(SEASLOG_WARNING);
$countResult_3 = SeasLog::analyzerCount(SEASLOG_ERROR, date('Ymd', time()));

var_dump($countResult_1, $countResult_2, $countResult_3);
/*
array(8) {
  ["DEBUG"]=>
  int(3)
  ["INFO"]=>
  int(3)
  ["NOTICE"]=>
  int(3)
  ["WARNING"]=>
  int(3)
  ["ERROR"]=>
  int(6)
  ["CRITICAL"]=>
  int(3)
  ["ALERT"]=>
  int(3)
  ["EMERGENCY"]=>
  int(3)
}

int(7)

int(1)

*/

Получение списка определённого типа логов

SeasLog использует системный канал (grep -w) для получения значений и возвращает массив в PHP.

$detailErrorArray_inAll   = SeasLog::analyzerDetail(SEASLOG_ERROR);
$detailErrorArray_today   = SeasLog::analyzerDetail(SEASLOG_ERROR, date('Ymd', time()));
``````php
var_dump($detailErrorArray_inAll, $detailErrorArray_today);
/*
SeasLog::analyzerDetail(SEASLOG_ERROR) == SeasLog::analyzerDetail(SEASLOG_ERROR, '*');
Получение полного списка логов уровня SEASLOG_ERROR для данного регистратора:
array(6) {
    [0]=>
    string(83) "2014-02-24 00:14:02 | ОШИБКА | 8568 | 599157af4e937 | 1393172042.717 | тестовая ошибка 3",
    [1]=>
    string(83) "2014-02-24 00:14:04 | ОШИБКА | 8594 | 5991576584446 | 1393172044.104 | тестовая ошибка 3",
    [2]=>
    string(83) "2014-02-24 00:14:04 | ОШИБКА | 8620 | 1502697015147 | 1393172044.862 | тестовая ошибка 3",
    [3]=>
    string(83) "2014-02-24 00:14:05 | ОШИБКА | 8646 | 599159975a9ff | 1393172045.989 | тестовая ошибка 3",
    [4]=>
    string(83) "2014-02-24 00:14:07 | ОШИБКА | 8672 | 599159986ec28 | 1393172047.882 | тестовая ошибка 3",
    [5]=>
    string(83) "2014-02-24 00:14:08 | ОШИБКА | 8698 | 5991599981cec | 1393172048.736 | тестовая ошибка 3"
}
*/
```SeasLog::analyzerDetail(SEASLOG_ERROR, date('Ymd', time()));
Получение всех логов уровня SEASLOG_ERROR для данного регистратора за сегодняшний день.
array(2) {
  [0] =>
  string(83) "2014-02-24 00:14:02 | ОШИБКА | 8568 | 599157af4e937 | 1393172042.717 | тестовая ошибка 3"
  [1] =>
  string(83) "2014-02-24 00:14:04 | ОШИБКА | OnClickListener | 5991576584446 | 1393172044.104 | тестовая ошибка 3"
}

Вы также можете получить список логов за текущий месяц:
$detailErrorArray_месяц = SeasLog::analyzerDetail(SEASLOG_ERROR, date('Ym', time()));

*/

### Использование SeasLog для проведения здорового мониторинга
#### Настройка предупреждений
```conf
[base]
wait_analyz_log_path = /log/base_test

[fork]
;Переключатель открытия потока вилок 1-ДА 0-НЕТ
fork_open = 1

;количество потоков
fork_count = 3

[warning]
email[smtp_host] = smtp.163.com
email[smtp_port] = 25
email[subject_pre] = Тема письма - Предупреждение
email[smtp_user] = seaslogdemo@163.com
email[smtp_pwd] = seaslog#demo
email[mail_from] = seaslogdemo@163.com
email[mail_to] = neeke@php.net
email[mail_cc] = ciogao@gmail.com
email[mail_bcc] =

[analyz]
; перечень уровней
; SEASLOG_DEBUG      "DEBUG"
; SEASLOG_INFO       "INFO"
; SEASLOG_NOTICE     "NOTICE"
; SEASLOG_WARNING    "WARNING"
; SEASLOG_ERROR      "ОШИБКА"
; SEASLOG_CRITICAL   "КРИТИЧЕСКО"
; SEASLOG_ALERT      "ПРЕДУПРЕЖДЕНИЕ"
; SEASLOG_EMERGENCY  "ЭМЕРГЕНЦИЯ"

test1[module] = test/bb
test1[level] = SEASLOG_ERROR
test1[bar] = 1
test1[mail_to] = neeke@php.net

test2[module] = 222
test2[level] = SEASLOG_WARNING
test2[mail_to] = neeke@php.net,ciogao@gmail.com

test3[модуль] = 333
test3[uровень] = SEASLOG_CRITICAL

test4[модуль] = 444
test4[uровень] = SEASLOG_EMERGENCY

test5[модуль] = 555
test5[uровень] = SEASLOG_DEBUG

Конфигурация crontab

;Запустите этот шелл каждый день в три часа утра.
0 3 * * * /путь/к/php /путь/к/SeasLog/Analyzer/SeasLogAnalyzer.php

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Эффективное, быстрое и стабильное расширение для логирования на PHP. Развернуть Свернуть
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/neeke-SeasLog.git
git@api.gitlife.ru:oschina-mirror/neeke-SeasLog.git
oschina-mirror
neeke-SeasLog
neeke-SeasLog
master