1.0.0 • Published 4 years ago

react-logview v1.0.0

Weekly downloads
4
License
-
Repository
-
Last release
4 years ago

react-logview

Using virtual window and lowlight to render logs without innerHTML and fast.

Install

npm install --save react-logvew

Get Started

Basic Usage

You can use log view easily by import LogView component

import React from 'react';
import { LogView } from 'react-logview';

const generateRandomLogs = (sum) => {
  let i = sum;
  let str = ''
  while (sum--) {
    str += `${Math.random() > 0.5 ? '[WARN]' : '[ERROR]'}: ${Math.random().toString(16).slice(-5).repeat(10)}\n`
  }
  return str
}

export default () => <LogView content={generateRandomLogs(100)} height={120} />;

Massive Mount of Logs

Event with million lines of logs, still not block browser

import React, {useState} from 'react';
import { LogView } from 'react-logview';

const generateRandomLogs = (sum) => {
  let i = sum;
  let str = ''
  while (sum--) {
    str += `${Math.random() > 0.5 ? '[WARN]' : '[ERROR]'}: ${Math.random().toString(16).slice(-5).repeat(10)}\n`
  }
  return str
}

export default () => { 
  const [content, setContent] = useState('Press Load to load');
  
  return <><button onClick={() => setContent(generateRandomLogs(1200000))}>Load</button><LogView revert language="prolog" content={content} height={200}  /></>};

Themes

We support light(github style) and dark(darcula style) by using theme;

import React from 'react';
import { LogView } from 'react-logview';

const generateRandomLogs = (sum) => {
  let i = sum;
  let str = ''
  while (sum--) {
    str += `${Math.random() > 0.5 ? '[WARN]' : '[ERROR]'}: ${Math.random().toString(16).slice(-5).repeat(10)}\n`
  }
  return str
}

export default () => <>
  Light Theme
  <LogView content={generateRandomLogs(100)} height={120} />
  Dark Theme
  <LogView content={generateRandomLogs(100)} height={120} theme="dark" />
</>;

Keyword Search

By using keyword props, you can find the lines contains your words.

import React, { useState } from 'react';
import { LogView } from 'react-logview';

const generateRandomLogs = (sum) => {
  let i = sum;
  let str = ''
  while (sum--) {
    str += `${Math.random() > 0.5 ? '[WARN]' : '[ERROR]'}: ${Math.random().toString(16).slice(-5).repeat(10)}\n`
  }
  return str
}

export default () => {
  const [keyword, setKeyword] = useState('ERROR')
  console.log(keyword)

  return <>
  <input value={keyword} onChange={({target: {value}}) => setKeyword(value)} />
  <LogView content={generateRandomLogs(100)} height={120} keywords={keyword} />
</>};

Props

PropsTypeDescription
contentstring(required) content of logs
widthnumberwidth
heightnumberheight
fontSizenumberfont size of log
theme"light" | "dark"theme now only support light and dark
languagestringlanguage of logs default set to prolog
focusLinenumberon change of focus line, view will scroll to lineNumber
keywordsstringfilter the line that contains keywords
styleStylestyles of view
listRefMutableRefref of container dom
onScrollBottom() => voidcall back on scroll to bottom
revertbooleanrevert logs rank

Develop

Install dependencies,

$ npm i

Start the dev server,

$ npm start

Build documentation,

$ npm run docs:build

Build the lib

$ npm run build