很多朋友在使用过程中提到自定义日志模板的需

使用SeasLog打造PHP项目中的高性能日志组件(1)

什么是SeasLog

SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便、规范、高效地写日志,以及快速地读取和查询日志。

为什么使用SeasLog

无论在什么应用中,log日志都是架构中不可缺少的一个重要组成部分,它通常是系统或软件、应用的运行记录。通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。

我们知道,php内置了很多log函数,如error_log、syslog、file_put_content,这些函数功能强大且性能极好,但由于各种缺陷(error_log、file_put_content无错误级别、无固定格式像是信马由缰随处乱画;syslog不区分模块、而且与系统日志混合,读syslog记录会让人抓狂的。),灵活度降低了很多,很不能满足应用需求。基本上所有的开发者,都会自行设计封装log库,当然也会有很多开发者选择已有的开源日志库。

也有很多开源log类库弥补了上述缺陷,如log4php、plog、Analog等(当然也有很多应用在项目中自己开发的log类)。其中以log4php最为著名,它的设计精良、格式完美、文档完善、功能强大。但是经过测试,log4php的性能非常差。

图片 1

这是log4php与SeasLog的性能对比图:

设计思路

那么有没有一种log类库同时满足以下需求呢:

●分模块、分级别

●配置简单(最好是勿须配置)

●日志格式清晰易读

●应用简单、性能很棒

我们知道,PSR-3标准是一个国际化的日志标准,它要求了“模块、级别、清晰、易用”等日志工作应具备的特点。因此,只要我们遵循了PSR-3标准,则我们可以完成“分模块、分级别”以及“日志格式清晰易读”的要求。

“配置简单”这个需求也很好完成。如果严格按照既定规则,其实只需要设置默认目录就可以了。

OK,现在我们只剩下“性能”这一个要求。

既然是日志,免不了会写文件,或者通过pipe通过网络传送到某个存储中心(我们暂不考虑存储中心的设计)。可以想见,假设一个请求中需要写出1000处log,那么势必会有1000次IO,这对性能将是一个很大的拖延点。一般对于处理这种多次相同的请求场景,我们要解决的其实也很简单,使用cache或buffer,把多次请求作归并,从而降低对磁盘或网络的IO,这是一个基本的思想。

SeasLog也是这么做的。设定一个buffer_size(默认100条log),使用PHP请求内存,每写一次log,塞入内存,同时buffer_size加;当buffer_size等于设置值时,则进行一次IO,同时清除buffer; 当然,如果请求结束了、或执行了die、exit或其他异常退出时,不管buffer_size有没有攒够设置值,立刻进行一次IO,同时清除buffer。

到目前为止,SeasLog的正式版本为1.1.6,采用Apache 2.0开源协议,同时可以在php.net官方,和Github库上获得它的完整代码。

Php.net

Github

目前提供了什么

●在PHP项目中便捷、规范地记录log

●可配置的默认log目录与模块

●指定log目录与获取当前配置

●初步的分析预警框架

●高效的日志缓冲、便捷的缓冲debug

●遵循 PSR-3 日志接口规范

怎么安装

获得源码后,可自行编译。

$ /path/to/phpize

$ ./configure --with-php-config=/path/to/php-config 

$ make && make install

当然,使用PECL管理工具会更方便: 

$ pecl install seaslog

seaslog.ini的配置

; configuration for php SeasLog module extension = seaslog.so seaslog.default_basepath = /log/seaslog-test    ;默认log根目录 seaslog.default_logger = default                ;默认logger目录 seaslog.disting_type = 1                            ;是否以type分文件 1是 0否(默认) seaslog.disting_by_hour = 1                      ;是否每小时划分一个文件 1是 0否(默认) seaslog.use_buffer = 1                              ;是否启用buffer 1是 0否(默认) seaslog.buffer_size = 100                         ;buffer中缓冲数量 默认0(不使用buffer_size) seaslog.level = 0                                       ;记录日志级别 默认0(所有日志) 

seaslog.disting_type = 1 开启以type分文件,即log文件区分infowarnerro

seaslog.disting_by_hour = 1 开启每小时划分一个文件

seaslog.use_buffer = 1 开启buffer。默认关闭。当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。

seaslog.buffer_size = 100 设置缓冲数量为100. 默认为0,即无缓冲数量限制.当buffer_size大于0时,缓冲量达到该值则写一次文件. 

seaslog.level = 3 记录的日志级别.默认为0,即所有日志均记录。当level为1时,关注debug以上级别(包括debug),以此类推。level大于8时,所有日志均不记录。


图片 2


) 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便...

编译安装 seaslog

$ /path/to/phpize
$ ./configure --with-php-config=/path/to/php-config
$ make && make install
使用SeasLog进行健康预警

 

 

程序员必上的开发者服务平台 —— DevStore

获取与设置basePath
$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(),将获取php.ini(seaslog.ini)中设置的seaslog.default_basepath 的值。

使用 SeasLog::setBasePath() 函数,将改变 SeasLog::getBasePath() 的取值。

# 主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度;
# DNS主配置文件中的zonerfc1912;
# acl基本上都是用include语句;
# 设定mime类型,类型由mime.type文件定义;
include mime.types;

Linux部分:

下载地址

将包用ftp传到Linux上 然后移走
mv SeasLog-1.6.9.tgz /usr/local/SeasLog.tgz

 

进入目录解压
cd /usr/local
tar -zxvf SeasLog.tgz

 

 

执行PHP安装目录下的phpize
/usr/local/php7/bin/phpize

 

搜索php-config路径
find /usr/local/php7/ -name php-config
得到/usr/local/php7/bin/php-config

 

配置
./configure --with-php-config=/usr/local/php7/bin/php-config

 

编译
make

 

安装
make install

出现Installing shared extensions: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/
则成功

 

打开php.ini进行配置
找到一排extension的地方 加上extension=seaslog.so

 

 

 

为什么使用SeasLog

log日志,通常是系统或软件、应用的运行记录。通过log的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用log足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的log同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。

php内置error_log、syslog函数功能强大且性能极好,但由于各种缺陷(error_log无错误级别、无固定格式,syslog不分模块、与系统日志混合),灵活度降低了很多,不能满足应用需求。

好消息是,有不少第三方的log类库弥补了上述缺陷,如log4php、plog、Analog等(当然也有很多应用在项目中自己开发的log类)。其中以log4php最为著名,设计精良、格式完美、文档完善、功能强大。推荐。(log4php的性能有待测试)

那么有没有一种log类库满足以下需求呢:

  • 分模块、分级别

  • 配置简单(最好是勿须配置)

  • 日志格式清晰易读

  • 应用简单、性能很棒

SeasLog 正是应此需求而生。

目前提供了什么

  • 在PHP项目中便捷、规范地记录log

  • 可配置的默认log目录与模块

  • 指定log目录与获取当前配置

  • 初步的分析预警框架

  • 高效的日志缓冲、便捷的缓冲debug

  • 遵循 PSR-3 日志接口规范

目前提供了什么
  • 在PHP项目中便捷、规范地记录log
  • 可配置的默认log目录与模块
  • 指定log目录与获取当前配置
  • 初步的分析预警框架
  • 高效的日志缓冲、便捷的缓冲debug
  • 遵循 PSR-3 日志接口规范
  • 自动记录错误信息
  • 自动记录异常信息
  • 连接TCP端口,以RFC5424格式发送日志
  • 连接UDP端口,以RFC5424格式发送日志
  • 支持RequestId区分请求
  • 支持日志模板自定义

# 引用日志main;
# access_log logs/access.log main;

Windows部分:

根据PHP版本 是否线程安全 进行选择 这些都可以在phpinfo里查得到

 

下载之后 把里面的php_seaslog.dll拷贝到PHP的安装目录下的ext里

 

然后打开php.ini进行配置

extension=php_seaslog.dll

 

 

SeasLog
Yet a log extension for PHP.A effective,fast,stable log extension for PHP
@author Chitao.Gao [neeke@php.net]

SEASLOG_EMERGENCY
  • "EMERGENCY" - 系统不可用
var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);
/*
string('DEBUG') debug级别
string('INFO')  info级别
string('NOTICE') notice级别
*/

# nginx跨域;

公共部分:

在php.ini中 extension下面接着配置以下信息:

 

seaslog.default_basepath = 'D:/WWW/log' ;默认log根目录 记着 是目录
seaslog.default_logger = default ;默认日志目录 位于default_basepath目录下的小目录
seaslog.disting_type = 1 ;是否以type分文件 1是 0否(默认) 若是 则每种级别都会单独生成日志文件
seaslog.disting_by_hour = 0 ;是否每小时划分一个文件 1是 0否(默认) 若是 则每个小时都会生成新文件
seaslog.use_buffer = 1 ;是否启用buffer 1是 0否(默认) 默认关闭,当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。
seaslog.buffer_size = 100 ;buffer中缓冲数量 默认0(不使用)
seaslog.level = 0 ;记录日志级别 默认0(所有日志)

 

第二条配置seaslog.default_logger我选择在项目的入口文件中再指定Seaslog::setLogger('...')

这样就可以每个项目一个日志目录了

 

SeasLog 日志8个级别
debug -> info -> notice -> warning -> error -> critical -> alert -> emergency

 

保存退出 重启Apache 打个phpinfo()出来找找有没有SeasLog扩展

 

 

以下是PHP中的seaslog函数:

 

basepath
设置:Seaslog::setBasePath('/log/base_test');
获取:Seaslog::getBasePath();

 

logger
设置:Seaslog::setLogger('app');
获取:Seaslog::getLastLogger();

 

写日志:
Seaslog::debug('...')
Seaslog::info('...')
Seaslog::notice('...')
八个级别都可以记录

日志内容格式为:级别-pid-时间戳-格式化时间-日志内容

 

读取日志条数
Seaslog::analyzerCount('{日志级别}');//如果不填参数 则代表统计全部级别
Seaslog::analyzerCount('{日志级别}','20170914');指定统计某一天的日志

 

读取日志
Seaslog::analyzerDetail('{日志级别}','20170914');//也有两个参数 日志级别和指定时间 第一个日志级别参数必填 时间可选

 

 

输出info级别的日志:
echo "<pre>";
print_r(Seaslog::analyzerDetail('info'));
echo "</pre>";

 

某些PHP框架默认为当前控制器命名空间 所以会报Seaslog not found
只需在前面指定根命名空间就OK: Seaslog::debug('...')

 

安装

预警的配置
[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] = gaochitao@weiboyi.com
email[mail_cc] = ciogao@gmail.com
email[mail_bcc] =

[analyz]
; enum
; SEASLOG_DEBUG      "DEBUG"
; SEASLOG_INFO       "INFO"
; SEASLOG_NOTICE     "NOTICE"
; SEASLOG_WARNING    "WARNING"
; SEASLOG_ERROR      "ERROR"
; SEASLOG_CRITICAL   "CRITICAL"
; SEASLOG_ALERT      "ALERT"
; SEASLOG_EMERGENCY  "EMERGENCY"

test1[module] = test/bb
test1[level] = SEASLOG_ERROR
test1[bar] = 1
test1[mail_to] = gaochitao@weiboyi.com

test2[module] = 222
test2[level] = SEASLOG_WARNING

test3[module] = 333
test3[level] = SEASLOG_CRITICAL

test4[module] = 444
test4[level] = SEASLOG_EMERGENCY

test5[module] = 555
test5[level] = SEASLOG_DEBUG

# 设置主机域名;
server_name localhost;

目标是怎样的

  • 便捷、规范的log记录

  • 高效的海量log分析

  • 可配置、多途径的log预警

自定义日志模板

很多朋友在使用过程中提到自定义日志模板的需求,于是自1.7.2版本开始,拥有了这个能力,允许用户自定义日志的模板, 同时在模板中可以使用预置的诸多预设变量,参照预设变量表。

# 日志格式的设定,main为日志格式的名称,可自行设置,后面引用;
# log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

seaslog.ini的配置

 ; configuration for php SeasLog module
extension = seaslog.so
seaslog.default_basepath = /log/seaslog-test    ;默认log根目录
seaslog.default_logger = default                ;默认logger目录
seaslog.disting_type = 1                        ;是否以type分文件 1是 0否(默认)
seaslog.disting_by_hour = 1                     ;是否每小时划分一个文件 1是 0否(默认)
seaslog.use_buffer = 1                          ;是否启用buffer 1是 0否(默认)

seaslog.disting_type = 1 开启以type分文件,即log文件区分infowarnerro

seaslog.disting_by_hour = 1 开启每小时划分一个文件

seaslog.use_buffer = 1 开启buffer。默认关闭。当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。

常量与函数

常量列表

* SEASLOG_DEBUG                       "debug"
* SEASLOG_INFO                        "info"
* SEASLOG_NOTICE                      "notice"
* SEASLOG_WARNING                     "warning"
* SEASLOG_ERROR                       "error"
* SEASLOG_CRITICAL                    "critical"
* SEASLOG_ALERT                       "alert"
* SEASLOG_EMERGENCY                   "emergency"


var_dump(SEASLOG_DEBUG,SEASLOG_INFO,SEASLOG_NOTICE);
/*
string('debug') debug级别
string('info')  info级别
string('notice') notice级别
*/

函数列表

SeasLog 提供了这样一组函数,可以方便地获取与设置根目录、模块目录、快速写入与统计log。 相信从下述伪代码的注释中,您可以快速获取函数信息,具体使用将紧接其后:

<?php
/**
 * @author ciogao@gmail.com
 * Date: 14-1-27 下午4:47
 */


class SeasLog
{
    public function __construct()
    {
        #SeasLog init
    }


    public function __destruct()
    {
        #SeasLog distroy
    }


    /**
     * 设置basePath
     * @param $basePath
     * @return bool
     */
    static public function setBasePath($basePath)
    {
        return TRUE;
    }


    /**
     * 获取basePath
     * @return string
     */
    static public function getBasePath()
    {
        return 'the base_path';
    }


    /**
     * 设置模块目录
     * @param $module
     * @return bool
     */
    static public function setLogger($module)
    {
        return TRUE;
    }


    /**
     * 获取最后一次设置的模块目录
     * @return string
     */
    static public function getLastLogger()
    {
        return 'the lastLogger';
    }


    /**
     * 统计所有类型(或单个类型)行数
     * @param $level
     * @param string $log_path
     * @return array | long
     */
    static public function analyzerCount($level = 'all',$log_path = '*')
    {
        return array();
    }


    /**
     * 以数组形式,快速取出某类型log的各行详情
     * @param $level
     * @param string $log_path
     * @return array
     */
    static public function analyzerDetail($level = SEASLOG_INFO,$log_path = '*')
    {
        return array();
    }


    /**
     * 获得当前日志buffer中的内容
     * @return array
     */
    static public function getBuffer()
    {
        return array();
    }


    /**
     * 记录debug日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function debug($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_DEBUG
    }


    /**
     * 记录info日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function info($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_INFO
    }


    /**
     * 记录notice日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function notice($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_NOTICE
    }


    /**
     * 记录warning日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function warning($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_WARNING
    }


    /**
     * 记录error日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function error($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ERROR
    }


    /**
     * 记录critical日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function critical($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_CRITICAL
    }


    /**
     * 记录alert日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function alert($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_ALERT
    }


    /**
     * 记录emergency日志
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function emergency($message,array $content = array(),$module = '')
    {
        #$level = SEASLOG_EMERGENCY
    }


    /**
     * 通用日志方法
     * @param $level
     * @param $message
     * @param array $content
     * @param string $module
     */
    static public function log($level,$message,array $content = array(),$module = '')
    {


    }
}

SeasLog Logger的使用(详细文档)

使用SeasLog进行健康预警

预警的配置

[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] = gaochitao@weiboyi.com
email[mail_cc] = ciogao@gmail.com
email[mail_bcc] =


[analyz]
; enum
; SEASLOG_DEBUG      "debug"
; SEASLOG_INFO       "info"
; SEASLOG_NOTICE     "notice"
; SEASLOG_WARNING    "warning"
; SEASLOG_ERROR      "error"
; SEASLOG_CRITICAL   "critical"
; SEASLOG_ALERT      "alert"
; SEASLOG_EMERGENCY  "emergency"


test1[module] = test/bb
test1[level] = SEASLOG_ERROR
test1[bar] = 1
test1[mail_to] = gaochitao@weiboyi.com


test2[module] = 222
test2[level] = SEASLOG_WARNING


test3[module] = 333
test3[level] = SEASLOG_CRITICAL


test4[module] = 444
test4[level] = SEASLOG_EMERGENCY


test5[module] = 555
test5[level] = SEASLOG_DEBUG

crontab配置

;每天凌晨3点执行
0 3 * * * /path/to/php /path/to/SeasLog/Analyzer/SeasLogAnalyzer.php

Demo:

<?php
/**
 * @author ciogao@gmail.com
 * Date: 14-1-27 下午4:41
 */

echo '<pre>';
var_dump(SEASLOG_TYPE_INFO,SEASLOG_TYPE_INFO_STR);
var_dump(SEASLOG_TYPE_WARN,SEASLOG_TYPE_WARN_STR);
var_dump(SEASLOG_TYPE_ERRO,SEASLOG_TYPE_ERRO_STR);


var_dump(seaslog_get_basepath());
var_dump(seaslog_get_lastlogger());
var_dump(seaslog_get_basepath());
var_dump(seaslog('test info'));
var_dump(seaslog('test warning', SEASLOG_TYPE_WARN));
var_dump(seaslog('test error', SEASLOG_TYPE_ERRO));


var_dump(seaslog_set_basepath('/log/base_test'));
var_dump(seaslog_set_logger('testModule/app1'));
var_dump(seaslog('test info 2'));
var_dump(seaslog('test warning 2', SEASLOG_TYPE_WARN));
var_dump(seaslog('test error 2', SEASLOG_TYPE_ERRO));
var_dump(seaslog_get_basepath());
var_dump(seaslog_get_lastlogger());
var_dump(seaslog_get_basepath());

var_dump(seaslog('test error 3', SEASLOG_TYPE_ERRO, 'test/bb'));

var_dump(seaslog_analyzer_count()); // == seaslog_analyzer_count(ALL_TYPE);
var_dump(seaslog_analyzer_count(SEASLOG_TYPE_ERRO)); // == seaslog_analyzer_count(SEASLOG_TYPE_ERRO,'*')
var_dump(seaslog_analyzer_count(SEASLOG_TYPE_ERRO,'20140211.log'));


var_dump(seaslog_analyzer_detail(SEASLOG_TYPE_ERRO)); // == seaslog_analyzer_detail(SEASLOG_TYPE_ERRO,'*')
var_dump(seaslog_analyzer_detail(SEASLOG_TYPE_ERRO,'20140211.log'));


echo "n";
SEASLOG_NOTICE
  • "NOTICE" - 一般重要性事件、执行过程中较INFO级别更为重要的信息

# 开启防止网络阻塞;
# tcp_nopush on;

SEASLOG_ERROR
  • "ERROR" - 运行时出现的错误、不必要立即进行修复、不影响整个逻辑的运行、需要记录并做检测

# 设置访问的与语言编码;
# charset koi8-r;

常量列表

SeasLog 共将日志分成8个级别

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

使用

# FastCGI相关参数是为了改善网站的性能;
# 减少资源占用,提高访问速度;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

seaslog.ini的配置
[SeasLog]
;configuration for php SeasLog module
extension = seaslog.so

;默认log根目录
seaslog.default_basepath = "/var/log/www"

;默认logger目录
seaslog.default_logger = "default"

;日期格式配置 默认"Y-m-d H:i:s"
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"

;是否以type分文件 1是 0否(默认)
seaslog.disting_type = 1

;是否每小时划分一个文件 1是 0否(默认)
seaslog.disting_by_hour = 0

;是否启用buffer 1是 0否(默认)
seaslog.use_buffer = 0

;buffer中缓冲数量 默认0(不使用buffer_size)
seaslog.buffer_size = 100

;记录日志级别,数字越大,根据级别记的日志越多。
;0-EMERGENCY 1-ALERT 2-CRITICAL 3-ERROR 4-WARNING 5-NOTICE 6-INFO 7-DEBUG 8-ALL
;默认8(所有日志)
;
;   注意, 该配置项自1.7.0版本开始有变动。
;   在1.7.0版本之前, 该值数字越小,根据级别记的日志越多: 
;   0-all 1-debug 2-info 3-notice 4-warning 5-error 6-critical 7-alert 8-emergency
;   1.7.0 之前的版本,该值默认为0(所有日志);
seaslog.level = 8

;日志函数调用回溯层级
;影响预定义变量 %F 中的行数
;默认0
seaslog.recall_depth = 0

;自动记录错误 默认1(开启)
seaslog.trace_error = 1

;自动记录异常信息 默认0(关闭)
seaslog.trace_exception = 0

;日志存储介质 1File 2TCP 3UDP (默认为1)
seaslog.appender = 1

;写入重试次数
;默认0(不重试)
seaslog.appender_retry = 0

;接收ip 默认127.0.0.1 (当使用TCP或UDP时必填)
seaslog.remote_host = "127.0.0.1"

;接收端口 默认514 (当使用TCP或UDP时必填)
seaslog.remote_port = 514

;过滤日志中的回车和换行符 (默认为0)
seaslog.trim_wrap = 0

;是否开启抛出SeasLog自身异常  1开启(默认) 0否
seaslog.throw_exception = 1

;是否开启忽略SeasLog自身warning  1开启(默认) 0否
seaslog.ignore_warning = 1
  • seaslog.disting_type = 1 开启以type分文件,即log文件区分infowarnerro
  • seaslog.disting_by_hour = 1 开启每小时划分一个文件
  • seaslog.use_buffer = 1 开启buffer。默认关闭。当开启此项时,日志预存于内存,当请求结束时(或异常退出时)一次写入文件。
  • seaslog.buffer_size = 100 设置缓冲数量为100. 默认为0,即无缓冲数量限制.当buffer_size大于0时,缓冲量达到该值则写一次文件.
  • seaslog.level = 8 记录的日志级别.默认为8,即所有日志均记录。
  • seaslog.level = 0 记录EMERGENCY。
  • seaslog.level = 1 记录EMERGENCY、ALERT。
  • seaslog.level = 2 记录EMERGENCY、ALERT、CRITICAL。
  • seaslog.level = 3 记录EMERGENCY、ALERT、CRITICAL、ERROR。
  • seaslog.level = 4 记录EMERGENCY、ALERT、CRITICAL、ERROR、- WARNING。
  • seaslog.level = 5 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE。
  • seaslog.level = 6 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE、INFO。
  • seaslog.level = 7 记录EMERGENCY、ALERT、CRITICAL、ERROR、WARNING、NOTICE、INFO、DEBUG。
  • seaslog.throw_exception = 1 开启抛出SeasLog抛出自身的异常。当出现录权限或接收服务器端口不通等情况时,抛出异常;关闭时不抛出异常。
  • seaslog.ignore_warning = 1 开启忽略SeasLog自身的警告。当出现目录权限或接收服务器端口不通等情况时,将进行忽略;关闭时,将抛出警告。

#################################

本文由必威发布于必威-运维,转载请注明出处:很多朋友在使用过程中提到自定义日志模板的需

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。