整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Html学习:key detection

Html学习:key detection

效果图:

2 html骨架:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--网页标题-->
    <title>detection</title>
    <!--内部css部分-->
    <style>
    ......
    </style>
</head>

<body>
    <!--div部分-->
    <div class="contain">
    ......
    </div>

    <!--内部js部分-->
    <script>    
      ......
    </script>
</body>
</html>

3 css部分:

 <!--内部css部分-->
    <style>
        /*网页和body整体设置*/
        html,body{
            margin:0;
            padding:0;
            /*网页背景颜色设置*/
            background-color: rgb(96, 94, 212);
        }
        
        /*class='contain'在css的前面有点*/
        .contain{
            width:200px;
            height: 200px;
            font-size:25px;
            text-align: center;
            position: absolute;
            left:50%;
            top:50%;
            transform:translate(-50%,-50%);
            z-index:30;
        }

        /*警示label和结果label*/
        .alertInfo,.resultInfo{
            color:rgb(12, 231, 213);
            font-weight: bold;
            /*可以写在这里,注意数字和px紧紧相邻*/
            width: 350px;
            height: 10px;

        }
        
        /*输入框的设置*/
        .text{
            width:150px;
            /*文本框默认显示,下面就是不显示*/
            /*outline:none;*/ 
            text-align: center;
            font-size:25px;
            color:blue;
        }

        /*显示框的设置*/
        .show{
            font-size:25px;
            color:red;
        }
    </style>

4 body的div部分:

    <!--div部分-->
    <div class="contain">
        <!--注意:style可以嵌套在里面,但不推荐,也可以单独写在上面的css内-->
        <!--p class="alertInfo" style="width: 350px; height: 10px">显示倒5个字符串的输入框:</!--p-->
        <p class="alertInfo" >显示倒5个字符串的输入框:</p>
        <!--placeholder是指输入框默认显示文字-->
        <input type="text" class="text" placeholder="请输入内容">
        <!--p class="resultInfo" style="width: 350px; height: 10px">显示倒4个字符串的显示区:</!--p-->
        <p class="resultInfo" >显示倒4个字符串的显示区:</p>
        <p class="show"></p>
    </div>

5 body的js=JavaScript=script部分:

    <!--内部js部分-->
    <script>
        // 被let声明的变量不会作为全局对象window的属性,而被var声明的变量却可以
        //text和show均是class,所以前面有一个点
        let input=document.querySelector(".text");
        let show=document.querySelector(".show");
        input.addEventListener('keyup',debounce(handle,100));
        // 防抖处理
        function debounce(func,wait){
            let timeflag;
            return function(){
                clearTimeout(timeflag); //清除100ms之内之前触发的定时器。
                let arg=arguments;
                let timethis=this;
                timeflag=setTimeout(func.bind(timethis,arg),wait);
            }
        }
        //回调函数
        function handle(){
            //输入框内倒取5个字符串
            input.value=input.value.slice(-5);
            //输入框内倒取4个字符串
            show.textContent=input.value.slice(-4);
            
        }
    </script>

6 html部分基础学习,自己整理并分享出来。

一)Filebeat介绍

FileBeat是一个轻量级的日志收集工具,他可以直接对接ES、Logstash、Kafka、Redis等。

FileBeat的工作原理:FileBeat启动一个或多个Input,每个log日志FileBeat开启了harvester。每个harvester读取单个log日志获取新写入的内容并将其发送至libbeat,libbeat将整合的数据发送至output,output发送至对应的目标服务。整体如图所示:

FileBeat整体架构

FileBeat主要有两个有两个重要组件:Inputs和harvesters。这两个组件一起完成读取文件内容并把数据发送至output中去。

(二)FileBeat中的重要组件及其作用

  • Harvester

harvester主要的作用是读取耽搁文件的内容,它按行读取并将内容发送至output。由于harvester负责打开或者关闭文件,所以在harvester运行过程中,这个文件的fd将会一直打开,也就是说直到harvester关闭前,这个文件的磁盘空间将一直保留。harvester的关闭可以使用close_inactive来控制。

  • Input

Input是负责管理所有的harvesters和找出所有带采集的内容。如果input的类型是log,input会去匹配所有满足配置路径的文件,并对每个文件开启harvester,每个文件都有个自己的一个Go routine。

样例如下:

filebeat.inputs:
- type: log
  paths:
    - /var/log/*.log
    - /var/path2/*.log

(三)Filebeat采集案例:

3.1 资源:

链接:https://pan.baidu.com/s/157WchxmBQKMWFz0CcC9mRA 提取码:l2b0

FileBeat下载包解压并修改配置:

>unzip filebeat-7.8.0.zip
>cd filebeat-7.8.0
>vim conf.yml

3.2背景

目的

为了便于在ELK中查看到对应日志需要对日志进行切割,包括他的日志级别、线程、类等信息。同时,对异常出现换行等也需要支持。

日志样例如下:

2022-11-26 16:31:26,386 195283108 DEBUG [lb-console-heartbeat-send-task-thread-2] (PidUtil.java:22) com.test.info.PidUtil - getPid used:43 (ms)

当前部署情况:

当前采用了比较主流的部署方式:

FileBeat->Logstash->ElasticSearch

配置文件:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/test/xxx/test.log
  multiline.type: pattern
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  tags: ["testlog"]

fields:
  service: web-test
  project: test-web

output.logstash:
  hosts: ["192.141.148.123:5044"]

processors:
  - dissect:
      when.contains:
        tags: "testlog"
      tokenizer: "%{} %{} %{} %{level} [%{thread}] (%{class}) %{msg}"
      field: "message"
      target_prefix: ""

启动命令:

回到根目录
./filebeat -e -c ./conf.yml &

注意点:

  • 异常日志会有换行等情况,日志需支持
  multiline.type: pattern
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  • 日志需要切割,故涉及到processor中的dissect
processors:
  - dissect:
      when.contains:
        tags: "livebosLog"
      tokenizer: "%{} %{} %{} %{level} [%{thread}] (%{class}) %{msg}"
      field: "message"
      target_prefix: ""

Processor可以对读取的数据进行简单的处理每个processor接收event数据、处理event数据、返回event数据,如果有多个processors,他的处理过程是按照配置文件顺序执行。

event -> processor 1 -> event1 -> processor 2 -> event2 ...

Dissect processor可以按照定义的格式切割字符串

样例如下:

processors:
  - dissect:
      tokenizer: "%{key1} %{key2} %{key3|convert_datatype}"
      field: "message"
      target_prefix: "dissect"

主要属性介绍:

tokenizer

定义切割的格式,convert datatype可以在切割完成后自动地将string转化成integer,long,float,boolean或ip.

field

需要切割的event字段名称。默认是message

target_prefix

切割后属性的前缀。

结果:

参考文献:

https://blog.csdn.net/qq_27818541/article/details/108229185

https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html

https://www.elastic.co/guide/en/beats/filebeat/current/dissect.html

https://mritd.com/2020/08/19/how-to-modify-filebeat-source-code-to-processing-logs/

如何避免el-form中el-input输入框回车键导致页面刷新的痛点问题

## 引言:问题起源与影响

在使用Element UI进行Web前端开发时,我们经常遇到一个常见的痛点问题:在`el-form`组件中的`el-input`输入框内按回车键时,页面会意外地刷新,这并非预期行为,尤其是在表单填写场景下,用户希望的是提交表单而非刷新整个页面。本文将深入探讨这个问题,并给出详尽的解决方案。

### 段落一:问题现象剖析

问题重现

html
<el-form>
  <el-form-item label="用户名">
    <el-input v-model="username"></el-input>
  </el-form-item>
  <!-- 其他表单元素... -->
</el-form>

在上述代码中,当我们在`el-input`中输入内容并按下回车键时,页面会发生刷新,这主要是因为浏览器默认对`<form>`标签或可输入元素(如`<input>`)的回车键事件处理为提交表单,而提交操作通常会导致页面刷新。

### 段落二:解决思路与方法

阻止默认行为

要解决此问题,我们可以采用两种主要策略:

1.

阻止回车键默认提交行为

javascript
export default {
  methods: {
    preventFormSubmit(e) {
      if (e.keyCode===13) { // keyCode 13代表回车键
        e.preventDefault(); // 阻止默认提交动作
        // 这里可以添加自定义的回车键触发逻辑,例如提交表单
      }
    }
  },
  mounted() {
    document.addEventListener('keydown', this.preventFormSubmit);
  },
  beforeDestroy() {
    document.removeEventListener('keydown', this.preventFormSubmit);
  }
}

2.

局部处理el-input回车事件

html
<el-form @submit.prevent>
  <el-form-item label="用户名">
    <el-input v-model="username" @keyup.enter.native.prevent></el-input>
  </el-form-item>
  <!-- 其他表单元素... -->
</el-form>

在上述代码中,`.native`修饰符用于监听原生DOM事件,`@keyup.enter.prevent`表示监听输入框的回车键按下事件并阻止其默认行为。

自定义回车键功能

javascript
// 在main.js或者其他全局引入的文件中
Vue.directive('prevent-form-submit', {
  inserted(el, binding, vnode) {
    el.addEventListener('keydown', (e)=> {
      if (e.target.tagName==='INPUT' && e.keyCode===13) {
        e.preventDefault();
        const form=vnode.context.$refs[binding.value];
        if (form && typeof form.validate==='function') {
          form.validate((valid)=> {
            if (valid) {
              // 触发表单提交逻辑
              form.submit();
            }
          });
        }
      }
    });
  }
});

// 在模板中应用全局指令
<el-form ref="myForm" @submit.prevent v-prevent-form-submit="'myForm'">
  <!-- 表单元素... -->
</el-form>

总结起来,解决`el-form`中`el-input`回车键导致页面刷新的问题,关键在于理解和利用Vue事件系统以及原生DOM事件的处理机制,通过适当的事件监听和阻止默认行为,我们可以轻松定制回车键的行为,提升用户体验,同时避免了不必要的页面刷新。希望本篇文章能帮助开发者更好地掌握这一技巧,并应用于实际项目中。