使用jar包格式化Docker 容器日志
前面使用JS格式化textarea中的日志内容,但局限于JS语言性能,在日志内容较多时效率无法接受,建议日志内容大于5000行时转投本java程序,文末提供jar包下载。
LogsFormat.java
package com.geostar.gfstack.docker.util; import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.commons.io.IOUtils; import java.io.*;
import java.net.InetAddress; /**
* @author 王睿
* @date 2019-01-17 10:54
*/
public class LogsFormat { public static void main(String[] args) throws IOException {
if (args.length == 0) {
System.err.println("请输入第一个参数:日志文件路径");
return;
}
String fileName = args[0];
InputStream is = LogsFormat.class.getResourceAsStream("/templates/DockerLogsTemplate.html");
String html = IOUtils.toString(is, "UTF-8");
File file = new File(fileName);
String text = IOUtils.toString(new FileInputStream(file), "UTF-8");
String[] arr = text.split("\n");
JsonParser parser = new JsonParser();
String time, log, stream;
StringBuilder sb = new StringBuilder(1024 * 10);
for (int i = 0; i < arr.length; i++) {
try {
JsonObject jsonObject = parser.parse(arr[i]).getAsJsonObject();
time = jsonObject.get("time").getAsString();
log = jsonObject.get("log").getAsString();
stream = jsonObject.get("stream").getAsString();
sb.append("<tr");
if ("stderr".equals(stream)) {
sb.append(" class='stderr'");
}
sb.append("><td>");
sb.append(i + 1);
sb.append("</td><td>");
sb.append(time);
sb.append("</td><td>");
sb.append(log);
sb.append("</td></tr>");
} catch (Exception e) {
e.printStackTrace();
}
}
InetAddress addr = InetAddress.getLocalHost();
String hostName = addr.getHostName() + "(IP:" + addr.getHostAddress() + ")";
html = html.replace("<![data]>", sb.toString())
.replace("<![log-file-path]>", file.getAbsolutePath())
.replace("<![log-file-host]>", hostName);
File outFile = new File(file.getPath() + ".html");
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8");
out.write(html);
out.close();
System.out.println("Docker日志格式化成功,请查看:" + outFile.getAbsoluteFile()); }
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>geostack</groupId>
<artifactId>docker-logs-format</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.geostar.gfstack.docker.util.LogsFormat</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerVersion>1.8</compilerVersion>
<skip>true</skip>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
完整源码请移步至https://github.com/wangrui027/docker-logs-format
执行 mvn clean compile assembly:single 构建可执行jar包即可使用,执行jar包时Docker原始日志文件作为第一个参数,在同目录下即可生成同名html文件,使用浏览器打开查看即可。
使用jar包格式化Docker 容器日志的更多相关文章
- Docker 容器日志格式化
Docker容器的日志文件每一行都是一个json对象,其包含log.stream.time三个属性,下面的HTML从textarea中读取输入的日志信息,格式化为表格显示. <!DOCTYPE ...
- Docker容器日志查看与清理的方法
Docker容器日志查看与清理的方法 Docker 容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器 ...
- docker 容器日志集中 ELK + filebeat
docker 容器日志集中 ELK ELK 基于 ovr 网络下 docker-compose.yaml version: '2' networks: network-test: external: ...
- docker容器日志收集方案汇总评价总结
docker日志收集方案有太多,下面截图罗列docker官方给的日志收集方案(详细请转docker官方文档).很多方案都不适合我们下面的系列文章没有说. 经过以下5篇博客的叙述简单说下docker容器 ...
- docker容器日志收集方案(方案二 filebeat+syslog本地日志收集)
与方案一一样都是把日志输出到本地文件系统使用filebeat进行扫描采集 不同的是输出的位置是不一样的 我们对docker进行如下设置 sudo docker service update --lo ...
- docker容器日志收集方案(方案一 filebeat+本地日志收集)
filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输. docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上 格式如下: { " ...
- 实时查看docker容器日志
实时查看docker容器日志 $ sudo docker logs -f -t --tail 行数 容器名 例:实时查看docker容器名为s12的最后10行日志 $ sudo docker logs ...
- docker容器日志清理
1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理(治标不治本,log迟早还会大的) 查看各个容器的log文件大小 find /var/lib/dock ...
- Docker容器日志查看与清理(亲测有效)
https://blog.csdn.net/yjk13703623757/article/details/80283729 1. 问题 docker容器日志导致主机磁盘空间满了.docker logs ...
随机推荐
- 前端入门11-JavaScript语法之数组
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...
- 为什么AI的翻译水平还远不能和人类相比?
为什么AI的翻译水平还远不能和人类相比? https://mp.weixin.qq.com/s/0koIt-qu9IOVxNhbFcZr1Q 作者 | SHARON ZHOU 译者 | 王天宇 编辑 ...
- 瓦片切图工具gdal2tiles.py改写为纯c++版本(二)
python这么火,C++/C#的程序员都生存不下去了,为啥还要干把python转写成c++的这种反动的事? 项目需要呗... gdal2tiles.py文件中有两个类是计算全球墨卡托与WGS84两种 ...
- QT解析和组装json
json这个小朋友熟悉又陌生,今天给同学们好好讲讲QT是如何使用json的,一句话:简单 1.什么是json? A:json就是个<key,value>字符串 ①一个json对象 {&qu ...
- CSS3(animation, trasfrom)总结
CSS3(animation, trasfrom)总结 1. Animation 样式写法: 格式: @-浏览器内核-keyframes 样式名 {} 标准写法(chrome safari不支持 @k ...
- 容器化系列 - GitLab启动和配置 on Docker
本文简单说明了如何在Docker容器中运行GitLab. 1 准备工作 1.1 下载镜像 $ docker pull docker.io/gitlab/gitlab-ce:latest 1.2 创建持 ...
- Camera Binning Mode
Camera Binning Mode:像素合并模式,将相邻的像素单元电荷通过物理的方法叠加在一起作为一个像素输出信号: 水平方向Binning: 同列相邻行的电荷叠加 垂直方向Binning: ...
- sqlserver中批量导出所有作业或链接脚本
问题描述: 经常在数据库迁移到另外一台服务器的时候,需要把作业也迁移过去,但是作业有时候好多个,要是一个个编写监本出来很麻烦 今天知道个简单方法批量可以导出sql脚本,顺便做个笔记 解决方法: 1.在 ...
- 进程命令(taskkill)
taskkill 命令: // 描述: 结束一个或多个任务或流程. // 语法: taskkill [/s <computer> [/u [<Domain>\]<User ...
- 英语口语练习系列-C10-up and down
<长恨歌>·白居易 长恨歌朗读视频,点我可听,thanks 长恨歌-白居易 汉皇重色思倾国,御宇多年求不得.杨家有女初长成,养在深闺人未识. 天生丽质难自弃,一朝选在君王侧.回眸一笑百媚生 ...