amis2/docs/zh-CN/components/log.md
lghxuelang 3baee3ff40
docs: log 文档完善 (#5770)
Co-authored-by: liuguihua <liuguihua@baidu.com>
2022-11-17 13:02:30 +08:00

174 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Log 实时日志
description:
type: 0
group: ⚙ 组件
menuName: Log
icon:
order: 56
---
用于实时显示日志或程序输出结果。
## 基本用法
通过设置 source 来获取日志,支持 ANSI 基本颜色显示。
```json
{
"type": "log",
"height": 300,
"source": "http://localhost:3000/"
}
```
由于缺少线上服务,所以这个例子无法在线演,它的运行效果如下图所示
![示例](https://suda.cdn.bcebos.com/images%2Famis%2Flog.gif)
### 后端实现参考
后端需要通过流的方式输出结果,比如 Node 实现示例:
```javascript
const http = require('http');
let app = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/plain',
'Access-Control-Allow-Origin': 'http://localhost:8888',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
'Access-Control-Allow-Credentials': 'true',
'Access-Control-Allow-Headers': '*'
});
let index = 1;
let timer = setInterval(() => {
if (index < 50) {
// 每次 write 都会立刻传给前端
res.write(`line: ${index}\n`);
index += 1;
} else {
res.end('end');
clearInterval(timer);
}
}, 100);
});
app.listen(3000, '127.0.0.1');
console.log('Node server running on port 3000');
```
其它语言请查找如何使用 stream 的方式返回内容,比如 Spring 的 `StreamingResponseBody`
```java
@Controller
public class StreamingResponseBodyController {
@GetMapping("/logs")
public ResponseEntity<StreamingResponseBody> handleLog() {
StreamingResponseBody stream = out -> {
for (int i = 0; i < 1000; i++) {
String msg = "log" + " @ " + new Date();
out.write(msg.getBytes());
out.flush();
}
out.close();
};
return new ResponseEntity(stream, HttpStatus.OK);
}
}
```
需要注意有些反向代理有 buffer 设置,比如 nginx 的 [proxy_buffer_size](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffer_size),它会使得即便后端返回内容也需要等 buffer 满了才会真正返回前端,如果需要更实时的效果就需要关掉此功能。
## 对于超长日志的优化
> 1.10.0 及以上版本
如果日志非常长会导致页面卡顿,这时有几种处理方法,请根据需求进行选择,也可以都使用:
1. 设置 `rowHeight`,比如 `"rowHeight": 22`,这时就会默认启用虚拟渲染,避免渲染卡顿
- 优点:仍然可以查看所有日志
- 缺点:如果某一行日志很长也不会自动折行,会出现水平滚动条;目前暂时不支持 autoScroll
2. 设置 `maxLength`,限制最大显示行数
- 优点:某一行日志很长的时候会自动折行
- 缺点:无法查看之前的日志
3. 试试通过 `"disableColor": false` 关闭 ANSI 颜色
## 自动滚动到底部
通过 `autoScroll` 可以关闭此功能
## source 支持变量
> 1.4.2 及以上版本
可以初始设置为空,这样初始不会加载,而等这个变量有值的时候再加载
```json
{
"type": "form",
"body": [
{
"label": "数据源",
"type": "select",
"name": "source",
"options": [
{
"label": "A",
"value": "http://localhost:3000/"
},
{
"label": "B",
"value": "http://localhost:4000/"
}
]
},
{
"type": "log",
"height": 300,
"placeholder": "请点击上面的数据源",
"source": "${source | raw}"
}
]
}
```
## source 支持高级配置
> 1.6.1 及以上版本
可以类似 api 那样自定义 header、method 等,比如:
```json
{
"type": "log",
"height": 300,
"source": {
"method": "post",
"url": "[/api/mock2/form/saveForm](http://localhost:3000/)",
"data": {
"myName": "${name}",
"myEmail": "${email}"
},
"headers": {
"my-header": "${myHeader}"
}
}
}
```
## 属性表
| 属性名 | 类型 | 默认值 | 说明 |
| ----------- | --------- | ------ | -------------------------------------------------------- |
| height | `number` | 500 | 展示区域高度 |
| className | `string` | | 外层 CSS 类名 |
| autoScroll | `boolean` | true | 是否自动滚动 |
| placeholder | `string` | | 加载中的文字 |
| encoding | `string` | utf-8 | 返回内容的字符编码 |
| source | `string` | | 接口 |
| rowHeight | `number` | | 设置每行高度,将会开启虚拟渲染 |
| maxLength | `number` | | 最大显示行数 |
| operation | `Array` | | 可选日志操作:['stop','restart',clear','showLineNumber','filter'] |