Layui+larave-log-view日志页面调整

日志插件配置layui数据表格
界面效果

@extends('layouts.admin')
@section('content')
<div class="layui-fluid">
    <div class="layui-card">
      <div class="layui-form layui-card-header layuiadmin-card-header-auto">
        <div class="layui-form-item">
          <div class="layui-inline">
            <label class="layui-form-label">日志文件</label>
            <div class="layui-input-block">
              <select id="logfile" name="top" lay-filter="file" data-type="changeLogfile">
                    @foreach($data['files'] as $file)
                      <option value="{{ $file }}" @if($data['current_file'] == $file) selected @endif>{{ $file }}</option>
                    @endforeach
              </select>
            </div>
        </div>
      </div>
       <div class="layui-card-body">
            <table id="LAY-mmk-common-data" lay-filter="LAY-mmk-common-data"
                data-url="{{ route('get_logs') }}"
                lay-contentType='application/json'
                data-field="{{ json_encode([
                    ['field'=>'level','title'=>'错误等级','width'=>150,"templet"=>'#level'],
                    ['field'=>'level_img','hide'=>true],
                    ['field'=>'level_class','hide'=>true],
                    ['field'=>'context','title'=>'Context','width'=>100],
                    ['field'=>'date','title'=>'日期','width'=>200,'sort'=>true],
                    ['field'=>'text','title'=>'内容',"templet"=>'#context'],
                ])}}"
                data-toolbar="buttons"
            ></table>
       </div>
  </div>
@endsection

@section('js')
    {{-- 设置 错误等级样式 --}}
    <script type="text/html" id="level">
        @{{#  if(d.level_class == 'danger'){ }}
           <span style="color:#FF5722" class="fa fa-@{{ d.level_img }}" aria-hidden="true">  @{{ d.level }}</span>
        @{{#  } else if(d.level_class == 'warning') { }}
           <span style="color:#FFB800" class="fa fa-@{{ d.level_img }}" aria-hidden="true">  @{{ d.level }}</span>
        @{{#  } else { }}
          <span style="color:#5FB878" class="fa fa-@{{ d.level_img }}" aria-hidden="true">  @{{ d.level }}</span>
        @{{#  } }}
    </script>

    {{-- 工具栏按钮 --}}
    <script type="text/html" id="buttons">
      <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="Downloadfile" >下载文件</button>
        <button class="layui-btn layui-btn-sm" lay-event="CleanFile">清空文件</button>
        <button class="layui-btn layui-btn-sm" lay-event="DeleteFile">删除文件</button>
        <button class="layui-btn layui-btn-sm" lay-event="DeleteFileAll">删除所有Log</button>
      </div>
    </script>

    <script type="text/javascript">
        layui.use(['form','table'],function(){
            var form = layui.form;
            var table = layui.table

            form.on('select(file)',function(data){
                var type = $(data.elem).data('type');
                active[type] ? active[type].call(this,data.value) : '';
            })

            var active =  {
                changeLogfile: function(file){
                  //执行重载
                  table.reload('LAY-mmk-common-data', {
                    page: {
                      curr: 1 //重新从第 1 页开始
                    }
                    ,url:"{{ route('get_logs') }}?l="+file
                  });
                },
                ajaxs:function(current_file,type){
                    if(type == 'dl')
                    {
                        location.href = '{{ route('get_logs') }}?'+type+"="+current_file;
                    }else{
                        layer.confirm('Are you sure?',{
                            offset: '100px'
                        },function(){
                            var ajax_lod = layer.load(1);
                            $.ajax({
                                type:"GET",
                                url:'{{ route('get_logs') }}?'+type+"="+current_file,
                                data:{
                                    _token:'{{ csrf_token() }}'
                                },
                                dataType: "json",
                                success: function(data){
                                    layer.close(ajax_lod);
                                    if(data.status == 1)
                                    {
                                        layer.msg(data.msg,{icon: 1,offset: '100px'})
                                    }
                                    setTimeout(function(){ location.reload() }, 500);
                                }
                                ,error:function(XMLHttpRequest, textStatus, errorThrow){
                                    layer.close(ajax_lod);
                                    var ret_json = XMLHttpRequest.responseJSON;
                                    layer.msg('请求失败,系统异常:'+ret_json.message,{icon: 5,anim:6,offset: '100px'})
                                }
                            });
                        })
                    }
                }
            }

            //工具头监听
            table.on('toolbar(LAY-mmk-common-data)', function(obj){
                var checkStatus = table.checkStatus(obj.config.id);
                switch(obj.event){
                  case 'Downloadfile':
                      active.ajaxs.call(this,$('#logfile').val(),'dl')
                  break;
                  case 'CleanFile':
                    active.ajaxs.call(this,$('#logfile').val(),'clean')
                  break;
                  case 'DeleteFile':
                    active.ajaxs.call(this,$('#logfile').val(),'del')
                    break;
                  case 'DeleteFileAll':
                    active.ajaxs.call(this,$('#logfile').val(),'delall')
                  break;
                };
            });
        });
    </script>
@endsection
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7
dannyvan

 请问这个用的是什么日志插件,是这个吗「rap2hpoutre/laravel-log-viewer」

5年前 评论

@dannyvan 是的,这个包是将laravel的日志,做了一下区分,通过正则匹配对应的信息

5年前 评论

日志很大的时候,前端反应很慢。有没有什么好的办法吗?

5年前 评论

@子兴的期盼 将.env文件的LOG_CHANNEL 改为 daily

5年前 评论

@FLaravel 这个已经拆了,我现在都想按小时了。不过拆的太多也不好,在考虑用ES

5年前 评论
dannyvan

你好,我重写了包里面默认的控制器,发现还是报错。试了很久

file

可以告知一下后端怎么处理吗 谢谢

5年前 评论

@dannyvan 这个包的核心是 LaravelLogViewer 这个类,你只需写一个自己定义的日志类,实例化LaravelLogViewer这个类就行,在使用这个类里面的方法,按照自己的逻辑写可以,也可以复制这个类控制器的方法也可以
$log = new LaravelLogViewer();

//已经被分割好的日志数组
$all = $log->all();

//获取当前默认文件
$currentFile = $log->getFileName();

//获取所有日志文件,它会将 logs目录下的日志文件全部拿到
$files = $log->getFiles(true);

基本就这些了,其他的你按照自己的逻辑去做处理,提一句他这边返回的是当前已经处理好的所有日志信息,如果量大要做分页,就需要自己实现逻辑了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!