同步操作将从 plume开源社区/Plumelog 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
无入侵的分布式日志系统,基于log4j、log4j2、logback搜集日志,设置链路ID,方便查询关联日志
基于elasticsearch作为查询引擎
高吞吐,查询效率高
全程不占应用程序本地磁盘空间,免维护
无需修改老项目,引入直接使用
plumelog-core 核心组件包含日志搜集端,负责搜集日志并推送到kafka,redis等队列
plumelog-server 负责把队列中的日志日志异步写入到elasticsearch
plumelog-ui 前端展示,日志查询界面
plumelog-demo 基于springboot的使用案例
plumelog-core 搜集日志发送到=>kafka或者redis
plumelog-server kafka或者redis=>elasticsearch
maven deploy -DskipTests 上传包到自己的私服
私服地址到plumelog/pom.xml改
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<distribution.repository.url>http://172.16.249.94:4000</distribution.repository.url>
</properties>
(1)如果用log4j,引入
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-log4j</artifactId>
<version>2.1.1</version>
</dependency>
配置log4j配置文件,增加下面这个Appender
kafka做为中间件
log4j.appender.L=com.plumelog.core.appender.KafkaAppender
#appName系统的名称(自己定义就好)
log4j.appender.L.appName=plumelog
log4j.appender.L.kafkaHosts=172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092
redis做为中间件
log4j.appender.L=com.plumelog.log4j.appender.RedisAppender
log4j.appender.L.appName=easyjob
log4j.appender.L.redisHost=172.16.249.72
log4j.appender.L.redisPort=6379
同理如果使用logback,和log4j2配置如下
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-logback</artifactId>
<version>2.1.1</version>
</dependency>
<!-- plumelog日志 -->
<appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
<appName>plumelog</appName>
<redisHost>172.16.249.72</redisHost>
<redisPort>6379</redisPort>
</appender>
<appender name="plumelog" class="com.plumelog.logback.appender.KafkaAppender">
<appName>plumelog</appName>
<kafkaHosts>172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092</kafkaHosts>
</appender>
<!-- 上面两个配置二选一 -->
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="plumelog" />
</root>
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-log4j2</artifactId>
<version>2.1.1</version>
</dependency>
<KafkaAppender name="kafkaAppender" appName="plumelog" kafkaHosts="172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] {%F:%L} - %m%n" />
</KafkaAppender>
<RedisAppender name="redisAppender" appName="plumelog" redisHost="172.16.249.72" redisPort="6379" >
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] [%-5p] {%F:%L} - %m%n" />
</RedisAppender>
</appenders>
<!-- 上面两个配置二选一 -->
<loggers>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="redisAppender"/>
</root>
</loggers>
普通日志使用
要想产生traceID,需要再拦截器里增加,如下:
@Component
public class Interceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
IdWorker worker = new IdWorker(1,1,1);
TraceId.logTraceID.set(String.valueOf(worker.nextId()));//设置TraceID值,不埋此点链路ID就没有
return true;
}
}
private static ExecutorService executorService = TtlExecutors.getTtlExecutorService(
new ThreadPoolExecutor(8, 8,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));
//省去每次Runnable和Callable传入线程池时的修饰,这个逻辑可以在线程池中完成
executorService.execute(() -> {
logger.info("子线程日志展示");
});
private static ThreadPoolExecutor threadPoolExecutor= ThreadPoolUtil.getPool(4, 8, 5000);
threadPoolExecutor.execute(TtlRunnable.get(() -> {
TraceId.logTraceID.get();
logger.info("tankSay =》我是子线程的日志!{}", TraceId.logTraceID.get());
}));
步骤一打包完的 启动 plumelog-server-1.0.jar ,高可用的话直接启动多个服务就行
注意:打完的包target目录下,lib文件夹(依赖包目录),config文件夹(两个配置文件的目录),plumelog-server-1.0.jar 放到同一个目录下
plumelog-server中plumelog.properties详解
#日志缓冲区,kafka,redis两种模式
plumelog.server.model=kafka
#kafka集群地址
plumelog.server.host.kafkaHosts=172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092
#如果是redis 这边填写redis地址
plumelog.server.redis.redisHost=172.16.249.72:6379
#elasticsearch集群地址
plumelog.server.host.esHosts=172.16.251.196:9200
#每次获取最大日志条数
plumelog.server.maxSendSize=5000
#日志读取频次,单位毫秒
plumelog.server.interval=100
查询界面
1.到plumelog-ui 配置 application.properties 中 es.esHosts 配置esapi地址 启动plumelog-ui-1.0.jar就行了
2.前端打包文档,也可以不用打包,plumelog-ui里面已经有一份打包好了的,如果自己修改代码那就要打包了
3.界面介绍
2.0版本增加全链路追踪功能,优化日志抓取写入,可以做生产用,1.0是demo版本,只做思路上的参考
3.0计划版本
1.增加获取非java项目日志API接口
2.增加性能分析,和API超时、时间窗口错误数、等信息告警功能
查询界面地址:http://demo.plumelog.com
访问这个地址产生测试log数据:http://demo.plumelog.com/demo/index?data=1234 data参数自己随便传,传什么打印什么
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。