我造了一个轮子去写系统日志

三种 绘制奈奎斯特曲线 的方法 如何绘制Nyquist曲线 提供三种绘制方法,其中使用最广泛的是概略图绘制方法 ①解析法绘制 ②概略图法绘制 ③MATLAB绘制 阅读详情

微信公众号:Java患者
专注Java领域技术分享

前言

在我们工作的项目中,每个项目都会涉及到操作日志,每个公司当然也有自己的想法自己做操作日志的保存。我今天造了一个简单的轮子来写日志。采用的技术是Executors跟BlockingQueue。

Executors


一个线程池接口,定义了一个可以接收Runnable对象的方法executor,该方法接收要给Runnable实例后,可以用来执行一个任务,一般使用execute(new RunnableTask())方法异步执行。

为什么要开另外一个线程?

为什么要异步执行?因为这里考虑到操作日志不应该影响到我们的性能,我们在操作之后,无需等到日志写完才response。

BlockingQueue

Blocking 即为阻塞,Queue即为队列,BlockingQueue阻塞队列类。

其实就是一个队列的数据结构,线程一直以队列的数据结构从BlockingQueue里面拿数据,如果没数据了,那么线程就一直阻塞进入等待状态,一直等一直等,直到有其他线程在BlockingQueue中添加了数据,被阻塞的线程被唤醒。同样,如果BlockingQueue是满的,有线程从队列中存放数据,线程也会被阻塞,一直等一直等,等到不满的时候,线程唤醒,继续存放数据。

实例

操作内容

package com.zero.na;

import java.util.Map;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class WriteLogUtil {

    private ExecutorService executorService;
    private BlockingQueue<Map<String, String>> bqBuff;

    public WriteLogUtil() {
        executorService = Executors.newSingleThreadExecutor();
        bqBuff = new ArrayBlockingQueue<>(1024);

        executorService.execute(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    Map<String, String> item = null;
                    try {
                        item = bqBuff.take();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    if (item != null) {
                        write(item);
                    }

                }
            }
        });
    }

    private final static WriteLogUtil instance = new WriteLogUtil();

    public static WriteLogUtil getInstance() {
        return instance;
    }

    public void appLog(Map<String, String> log) {
        saveLog(log);
    }

    private void saveLog(Map<String, String> log) {
        bqBuff.add(log);
    }

    private void write(Map<String, String> item) {
        System.out.println(item);
    }
}

测试1

package com.zero.na;

import java.util.HashMap;
import java.util.Map;

public class Test1 {

    public static void main(String[] args) {
        WriteLogUtil instance = WriteLogUtil.getInstance();
        Map<String, String> map = new HashMap<>();
        map.put("name", "zero");
        map.put("detail", "第一个客户支付了十块钱");

        instance.appLog(map);

    }
}

测试2

package com.zero.na;

import java.util.HashMap;
import java.util.Map;

public class Test2 {

    public static void main(String[] args) {
        WriteLogUtil instance = WriteLogUtil.getInstance();
        Map<String, String> map = new HashMap<>();
        map.put("name", "zero");
        map.put("detail", "第二个客户支付了二十块钱");

        instance.appLog(map);

    }
}



我们可以看到这个线程永远都不会停止,因为我们会有一个线程一直在while(true),一直在执行,永远都在等待。这个时候我们的用例写好了。这个时候我们的日志可以选择写在MongoDB数据库中。

这个我们下篇讲。。。。。。

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

huggingface 镜像站推荐 在做 Ai 应用开发或者学习的时候,我们经常需要下载各种模型,而 huggingface 的模型下载速度很慢或者根本就连不上,这里推荐一个 huggingface 的镜像站,速度很快,可以大大提高我们的效率。 阅读详情

相关推荐

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 914

推荐 17 个压箱底的常用类库

前言在java的庞大体系中,其实有很多不错的小工具,也就是我们平常说的:轮子。如果在我们的日常工作当中,能够将这些轮子用户,再配合一下idea的快捷键,可以极大得提升我们的开发效率。今天我决定把一些压箱底的小工具,分享给大家,希望对你有所帮助。本文会分享17个我们日常工作中一定会用得到的小工具,主要内容如下:1. Collections首先出场的是java.util包下的...

磊哥聊Java 982

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 668

造轮子是什么意思_因为造轮子,我一个月就转正了

作者 |Baldwin_KeepMind出品 | 优快云博客2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正,但因为一次优化代码过程中造了一个轮子,我获得了一个月转正的机会。我是一个懒人,又特别喜欢琢磨,在工作的过程中我发现有一个模块运行非常的慢,主要原因是在这个模块种需要大量的进行数据库操作,而目前公司业务扩大,在数据...

weixin_39766014的博客 444

伪傻瓜式安装sql server2008【附带安装包】

安装各式各样的软件无疑是学习过程中…较…为烦躁的一部分 木有醋 但还是开始吧 为什么这是伪呢? 因为刚开始天真无邪的我真的是傻瓜式安装(迷之自信),结果就B了(打开配置管理器的瞬间….一片空白) BaiduCloud分享 红领巾在何方?? Link链接:https://pan.baidu.com/s/1NZCxP0Y27dBPrgHoRWLDyQ...

EuniBoom的博客 6万+

工业级实战:C#实现欧姆龙PLC FINS-TCP通信(协议解析+完整源码+避坑指南)

// FINS主命令码+子命令码枚举(工业级常用指令)ReadData = 0x0101, // 读取数据WriteData = 0x0102, // 写入数据ReadPlcStatus = 0x0601, // 读取PLC状态ResetPlc = 0x0605 // 复位PLC(慎用)/// 欧姆龙PLC数据区枚举(工业常用)CIO = 0x30, // CIO区(核心数据区)WR = 0x31, // 工作区HR = 0x32, // 保持区。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 656

因为造轮子,我一个月就转正了 | 原力计划

作者 |Baldwin_KeepMind责编 | 伍杏玲出品 | 优快云博客2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机...

优快云资讯 6154

阿里云 Docker 镜像加速收费后:这些免费替代方案值得收藏

阿里云Docker镜像加速服务收费后,国内开发者急需免费替代方案。本文推荐2025年仍可用的7个免费镜像源,包括轩辕镜像、DaoCloud、网易云等,并提供多源配置方案以提高稳定性。建议开发者在CI/CD环境中配置多个镜像源,避免构建失败。文章还提供了详细的配置步骤和使用建议,适合个人和团队开发者参考。

sg_knight的专栏 1928

你还没找到工作?我已经因为自己造轮子而提前转正了

2019.6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正,但因为一次优化代码过程中造了一个轮子,我获得了一个月转正的机会。 我是一个懒人,又特别喜欢琢磨,在工作的过程中我发现有一个模块运行非常的慢,主要原因是在这个模块种需要大量的进行数据库操作,而目前公司业务扩大,在数据库中已经有上亿条数据,每次对这个表进行操作,都需要花费将近3S的时间,...

Baldwin_KeepMind 2万+

PoE 的三大国际标准:PoE、PoE+、PoE++

很多人知道 PoE 能“一根网线,既供电又传数据”,但鲜少有人能说清楚:PoE 供电到底分几种标准?差别有多大?哪些设备要用 PoE,哪些必须上 PoE+ 或 PoE++?今天,我们就来一次彻底的“拆解”,把 PoE 的三大国际标准——讲得明明白白,顺便也帮你厘清网络工程中的常见“供电疑惑”。

网络技术联盟站 1546

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

333

造轮子是什么意思_因为造轮子,我一个月就转正了 | 原力计划

作者 | Baldwin_KeepMind责编 | 伍杏玲出品 | 优快云博客2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正,但因为一次优化代码过程中造了一个轮子,我获得了一个月转正的机会。我是一个懒人,又特别喜欢琢磨,在工作的过程中我发现有一个模块运行非常的慢,主要原因是在这个模块种需要大量的进行数据库操作,而目前公司业务扩大,...

weixin_39811101的博客 1795

linux cma alloc fail 问题分析

摘要:日志显示CMA连续内存分配失败(错误码-ENOMEM),请求128页(512KB)内存时因CMA区域不足或内存碎片导致失败。分析发现系统CMA总内存131072KB,空闲65536KB。解决方案包括:1)手动触发内存碎片整理;2)修改设备树或内核配置增大CMA区域(如从16MB增至20MB)。通过调整CONFIG_CMA_SIZE_MBYTES或设备树中的size参数可解决该问题。

陌上花开缓缓归以的博客 796

因为造轮子,我一个月就转正了

往期热门文章:1,《往期精选优秀博文都在这里了!》2、面试 Google, 我失败了!3、去掉烦人的 “ ! = null " (判空语句)4、干掉可恶的 "try ca...

Java后端技术 630

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

继续造轮子-MongoDB写日志

微信公众号:Java患者专注Java领域技术分享继上一篇文章我造了一个轮子去写系统日志MongoDBMongoDB我们都知道是一个Nosql,其次MongoDB可以存储海量数据,正好满足...

ZeJava的博客 297

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

重复造轮子很蠢,但我还是自己写了一套博客系统

重复造轮子很蠢,我非常清楚,不需要任何人提醒。但犹豫之后,我还是自己写了一套博客系统。先回应一个很多人会有的疑惑:现在都什么年代了,怎么还有人自己做博客?这个问题我在上一篇里写过——。简单说,做博客不是目的,我是想通过长期写作养成输出表达的习惯,给自己留一块能完全做主的地方。但上一篇讲的是"为什么要写博客",这篇讲的是"为什么连博客系统都要自己写"。后者听起来更离谱:自己写博客就算了,还要自己造一个写博客的工具?这确实是我干出来的事。

愤怒的小兵 228

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

js date 当前日志往后一个月_因为造轮子,我一个月就转正了 | 原力计划

作者 |Baldwin_KeepMind责编 | 伍杏玲出品 | 优快云博客2019年6月,我通过社招入职现在所工作的公司,理论上应该有三个月时间的试用期,只有试用期表现良好我才有机会转正,但因为一次优化代码过程中造了一个轮子,我获得了一个月转正的机会。我是一个懒人,又特别喜欢琢磨,在工作的过程中我发现有一个模块运行非常的慢,主要原因是在这个模块种需要大量的进行数据库操作,而目前公司...

weixin_39675038的博客 273

我为什么还要造一个前端轮子?

现在市面上有很多为前端开发的框架、模板。为什么我们还要再做一个呢,究其原因,因为这些框架和模板更多的基于技术层面提供了快捷方便的实现方法;但却缺少具体业务层面的实现。因此,结合自身需求,将各种系统常用的功能和页面进行归纳总结,实现了一套更贴近实际业务的前端框架,框架中提供了一系列实际的业务功能模块,用户可直接使用,甚至无需做任何更改。

softwaiter的专栏 459

造轮子-AgileConfig一个基于.NetCore开发的轻量级配置中心

微服务确实是行业的一个趋势,我自己也在把一些项目往微服务架构迁移。玩微服务架构配置中心是一个绕不过去的东西,有很多大牌的组件可以选,比如spring-cloud-config,apoll...

dotNET跨平台 657

不要再重复造轮子了,这款多项目开发工具真的贼好使!

如今,随着企业业务的不断加深,信息系统的复杂性也越来越高,同时对系统的性能、可用性、可靠性和安全性都提出了新的要求,因此,要进行规范的企业信息系统的建设,一套成熟的开发工具是必不可少的。 力软多项目开发平台专注于企业应用领域,采用构件化设计理念,并内置高性能,高并发、高复用的基础组件,内置代码生成模块,能够快速构建高质量的企业应用系统。 这是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新多项目开发平台。使用此类工具,可以大大缩短开发周期,提高软件质量,同时也降低企业对高级软件开发人员

qq_38461437的博客 1万+

python 私活可以做什么_太强了!有了这款框架,接私活不用重复造轮子了

大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!今天小编推荐一款前后端分离的开源开发框架Jeebase,基于springboot+vue(vue-element-admin/Ant Design Pro Vue)开发,一套SpringBoot后台,两套前端页面,可以自由选择基于El...

weixin_34611277的博客 399

不要重复造轮子了!这里有一个牛逼的 Java 开源后台管理系统推荐给你!

今天想要记录一款非常全面好用的Java开源后台管理系统eladmin,项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。 开发文档:https://docs.auauz.net/ 体验地址...

Beat_IT的博客 2925

基础模型:从造轮子到搭积块的AI范式革命

基础模型代表人工智能从传统机器学习向预训练-微调范式的根本跃迁。其核心原理在于通过海量无监督数据构建通用认知压缩器,使模型习得世界运行的‘语法’而非孤立实体,从而在极小样本下实现强泛化。这一技术价值显著降低AI落地门槛,尤其适用于数据稀缺、领域专业性强、决策需可解释的工业质检、金融风控、医疗诊断等判别式任务。与生成式大模型不同,面向业务确定性的判别式基础模型(如BERT、Informer、ViT)已成为企业级AI主力。本文聚焦基础模型选型、微调本质与工程落地的黄金三角,结合真实行业案例解析如何避开数据偏移、

chongyuwan4121的博客 345

太赞了!推荐4个开源电商系统,不用重复造轮子了!

  大电商战略时代,越来越多的人选择将消费者引入自己建立的独立商城里面,打造自己的品牌。这时,选择一个开源的电商平台是一个不错的选择,既降低了电商从业者和创业者的进入门槛,又可以进行二次开发,满足更个性化的服务及需求。   接下来,推荐几款相对成熟、稳定,且保持更新的优秀的开源电商系统,希望能对大家有所帮助。 1.mall   项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、

Github导航站 8903

太强了!有了这款框架,接私活不用重复造轮子了

  大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!   今天小编推荐一款前后端分离的开源开发框架Jeebase,基于springboot+vue(vue-element-admin/Ant Design Pro Vue)开发,一套SpringBoot后台,两套前端页面,可以自由选择基于ElementUI或者AntDesign的前端界面。二期会整合react前端框架(Ant Design R

Github导航站 479

告别重复造轮子:用快马一键生成高效pcie工具模块提升开发效率

更重要的是,对于这类包含持续运行逻辑(如等待DMA完成中断、持续监控)的工具模块,在开发验证阶段,如果能快速部署到一个可交互的测试环境会非常方便。幸运的是,现在有了更高效的开发方式。你只需要清晰地描述你的需求,比如“生成一个用于Linux的PCIe DMA测试模块,包含吞吐量测量和日志功能”,平台就能快速生成一个结构清晰、可直接编译运行的基础项目框架。总而言之,在PCIe这类底层开发中,通过设计良好的工具模块来封装复杂性,并利用智能工具加速初始代码的生成和验证,是提升开发效率、保证代码质量的关键。

NightshadeRaven21的博客 23
上一篇: java中将maven的源码打包到本地成source.jar
下一篇: 继续造轮子-MongoDB写日志
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值