zoukankan      html  css  js  c++  java
  • php 安装使用 seaslog扩展

    这是一个高性能的日志记录扩展,能迅速帮你格式化的写入日志文件。

    首先来看安装:

    sudo pecl install seaslog

    一句话搞定,然后更新php.ini配置文件

    添加启用以及一部分配置

    extension=seaslog
    
    
    
    [SeasLog]
    ;默认log根目录
    seaslog.default_basepath = "/tmp/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"
    
    ;是否以目录区分Logger 1是(默认) 0否
    seaslog.disting_folder = 1
    
    ;是否以type分文件 1是 0否(默认)
    seaslog.disting_type = 0
    
    ;是否每小时划分一个文件 1是 0否(默认)
    seaslog.disting_by_hour = 1
    
    ;是否启用buffer 1是 0否(默认)
    seaslog.use_buffer = 1
    
    ;buffer中缓冲数量 默认0(不使用buffer_size)
    seaslog.buffer_size = 1000
    
    ;cli运行时关闭buffer
    ;1是 0否(默认)
    seaslog.buffer_disabled_in_cli = 0
    
    ;记录日志级别,数字越大,根据级别记的日志越多。
    ;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
    
    ;自动记录notice 默认0(关闭)
    seaslog.trace_notice = 0
    
    ;自动记录warning 默认0(开启)
    seaslog.trace_warning = 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
    
    ;接收端口的超时时间 默认1秒
    seaslog.remote_timeout = 1
    
    ;过滤日志中的回车和换行符 (默认为0)
    seaslog.trim_wrap = 0
    
    ;是否开启抛出SeasLog自身异常  1开启(默认) 0否
    seaslog.throw_exception = 1
    
    ;是否开启忽略SeasLog自身warning  1开启(默认) 0否
    seaslog.ignore_warning = 1
    
    ;是否开启性能追踪 1开启 0关闭(默认)
    seaslog.trace_performance = 0
    
    ;性能追踪时的千分比采样率
    ;默认10,即百分之一
    seaslog.trace_performance_sample_rate = 10
    
    ;性能追踪时的开始层级 默认从第1层开始
    seaslog.trace_performance_start_depth = 1
    
    ;性能追踪时深度层级 默认5层
    seaslog.trace_performance_max_depth = 5
    
    ;性能追踪时每层的函数最大数 按wall_time降序排列top 默认top5
    seaslog.trace_performance_max_functions_per_depth = 5
    
    ;性能追踪时当前请求执行时间的记录阈值 只有当请求执行时间大于该值时,才记录性能日志 默认1000ms
    seaslog.trace_performance_min_wall_time = 1000
    
    ;性能追踪时每个方法执行时间的记录阈值 只有当方法执行时间大于该值时,才参与计算 默认10ms
    seaslog.trace_performance_min_function_wall_time = 10

    然后就可以使用了,我设置了默认的日志文件存储位置  seaslog.default_basepath = "/tmp/log/www" ,默认目录  seaslog.default_logger = "default" 默认开启了buffer。

    如果不开buffer 写入也还算蛮快,如果开了buffer,那写入简直飞起。

    <?php
    
    SeasLog::setBasePath('./log/');
    for ($i=0; $i < 1000000; $i++) { 
      $result = SeasLog::info('this is a info log'.$i);
    }

    不开启buffer 耗时 2915 ms 约等于 每秒30万

    开启buffer 写入更快 下面是我做的测试

    seaslog.buffer_size = 1000       的时候 执行100万次写入 耗时 1807 ms 约等于 每秒50万
    seaslog.buffer_size = 800000   的时候 执行100万次写入 耗时 1579 ms 约等于 每秒60万
    seaslog.buffer_size = 1200000 的时候 执行100万次写入 耗时   521 ms 约等于 每秒191万

    当你buffer开的足够大,实际上就是在写内存了,写入速度非常快,但是根据测试发现,这个最终写入会在程序结束的时候写入,而我们捕捉不到这个时间,所以会以为调用info结束就是写入结束,实际上还没写入,这样的话统计的时间是不太正确的,因为我看到程序先是输出时间,然后顿了一下,终端才退出,这说明这个顿一下中间的时间实际上就是刷新到存储介质上的时候。可以用 SeasLog::flushBuffer(); 来验证,该方法就是刷新内存到介质中。

    具体配置看这里

  • 相关阅读:
    163国内镜像源
    一个简单的springboot项目
    springcloud概述
    final关键字
    springboot项目多模块打包
    Unity Shaderlab: Object Outlines
    生命周期
    Unity内置事件
    Win10输入指示器关掉后自动恢复的问题
    Unity Shader-后处理:景深
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/15213823.html
Copyright © 2011-2022 走看看