您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
GPS定位系统-MVC
.NET6.0 GPS定位系统介绍(物联网) 系列源码下载 1、新建.net core web工程 2、添加自定义登录页面 3、添加百度地图页面 4、添加后台日志系统 5、添加mysql数据存储 6、添加SqlServer数据存储(额外内容) 7、用户注册与登录功能实现 8、添加坐标报表页面(用于遍历地图坐标) 9、前后端数据交互与报表数据展示 10、报表数据的编辑与修改 11、用户登录与退出 12、自定义GPRS通讯协议 13、添加TCP通讯功能(接收) 14、添加TCP通讯功能(发送) 15、模拟GPRS数据通讯 16、设备链接状态检测与提示 17、新建Windows Server虚拟机 18、服务器IIS运行环境配置 19、服务器.net程序发布 20、关于如何配置.net3.1框架 21、关于如何配置.net5.0框架 22、WinForm版地图上位机(带数据库和TCP功能) 23、WPF版地图上位机(带数据库和TCP功能) 24、公网映射与外网通讯 25、GPS协议与AT命令流程说明 26、GPRS协议与AT命令流程说明 27、STM32、A9G硬件连接图 28、STM32开发环境搭建 29、STM32 GPS/GPRS通讯功能实现 30、STM32 GPS定位数据上报服务器 31、室外最终效果演示 32、结束语
3、添加百度地图页面
5、添加mysql数据存储
激萌の小宅 小宅博客网 GPS定位系统-MVC

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

添加后台日志系统 - (第四讲)

视频讲解如下:


工程源码下载:GPS定位系统系列教程源码下载

        

        今天这个章节给大家讲讲如何实现一个简单的日志系统,日志的存储方式一般分为两种,一种是文本文件的方式,另一种则是数据库的方式。今天要讲的是如何将系统的运行日志存储到文件中。

       日志系统的原理其实也很简单,就是采用ConcurrentQueue队列将所有需要存储的日志进行缓存,在每次往队列里面添加日志时,都发送一个消息告诉线程需要写文件了,线程一旦接收到消息,就不停的从队列中提取出日志信息,并写到文件,当然了,你也可以把它写到数据库里面,都是可以的。

       日志系统的类文件我们取名为:LogHelper.cs,我们新建一个comm目录,将我们的LogHelper.cs文件放在该目录下面,LogHelper.cs文件代码如下:

using System.Collections.Concurrent;

namespace WebApplicationGPS.comm
{
    public static class LogHelper
    {
        /// <summary>
        /// 添加并发队列,存储所有的日志信息
        /// </summary>
        private static readonly ConcurrentQueue<string> _que = new ConcurrentQueue<string>();

        /// <summary>
        /// 设置线程同步事件,通知线程进行日志写操作
        /// </summary>
        private static readonly ManualResetEvent _mre = new ManualResetEvent(false);

        /// <summary>
        /// 启动线程
        /// </summary>
        public static void Start()
        {
            new Thread(new ThreadStart(ThreadLog)) { IsBackground = false }.Start();
        }

        /// <summary>
        /// 外部调用,往队列里面写日志信息,同时发出信号,通知线程开始写文件
        /// </summary>
        /// <param name="data"></param>
        public static void WriteLog(string data)
        {
            try
            {
                if (data == null || data == "") return;
                // debug
                System.Diagnostics.Debug.WriteLine(data);
                // 往队列写数据
                _que.Enqueue($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:{data}\r\n");
                // 发出信号,通知线程开始写文件
                _mre.Set();
            }
            catch { }
        }

        /// <summary>
        /// 日志文件写线程
        /// </summary>
        private static void ThreadLog()
        {
            while (true)
            {
                try
                {
                    // 创建目录,放循环里面,如果目录被意外删除了,也能恢复
                    string path = AppDomain.CurrentDomain.BaseDirectory + @"\logs";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);

                    while (true)
                    {
                        // 按每小时一个文件的周期进行日志存储
                        string filePath = Path.Combine(path, DateTime.Now.ToString("yyyy-MM-dd HH") + " log.txt");
                        _mre.WaitOne(); // 阻塞线程,直到调用Set方法才能继续执行
                        while (_que.Count > 0 && _que.TryDequeue(out string msg))
                        {
                            // 不停的写文件
                            File.AppendAllText(filePath, msg);
                        }
                        _mre.Reset(); // 释放信号,等待下次信号到达
                        Thread.Sleep(1);
                    }
                }
                catch { }
            }
        }
    }
}


日志系统的方法文件已经有了,这时就需要测试我们的日志了。

首先我们需要新建两个文件:

ServerInit.cs:用于初始化整个系统的后台程序,包括日志系统、数据库、TCP通讯等。

APP/Service.cs:位于APP目录下,主要为我们的后台线程应用程序,在当前项目中其实是用不到它的,我们这里用它来演示我们的日志功能。


新增App目录结构和Service.cs、ServerInit.cs文件内容如下:

QQ截图20220914140243.jpg


Service.cs 代码如下,实现的效果就是每秒写一次日志。

using WebApplicationGPS.comm;

namespace WebApplicationGPS.APP
{
    public class Service
    {
        /// <summary>
        /// 后台应用程序入口
        /// </summary>
        public void TaskService()
        {
            try
            {
                while (true)
                {
                    Thread.Sleep(1000);
                    LogHelper.WriteLog($"写日志:{DateTime.Now.ToString()}");
                }
            }
            catch { }
        }
    }
}


ServerInit.cs 代码如下:

using WebApplicationGPS.APP;
using WebApplicationGPS.comm;

namespace WebApplicationGPS
{
    public class ServerInit
    {
        public ServerInit()
        {
            // 启动日志系统
            LogHelper.Start();

            // 启动后台应用程序
            AppStart();
        }

        /// <summary>
        /// 启动后台应用
        /// </summary>
        private void AppStart()
        {
            new Thread(() =>
            {
                Service app = new Service();
                while (true)
                {
                    app.TaskService();
                    Thread.Sleep(1000);
                }
            })
            { IsBackground = true }.Start();
        }
    }
}


ServerInit文件目前还不能被系统调用,所以我们需要在Program.cs中添加对ServerInit的调用,起到初始化的作用。

添加方法也很简单,直接在Program.cs的app.Run();前面追加如下代码,并补上相应的引用即可。

注意:一定要加在app.Run();的前面,系统启动时会停在app.Run();位置,并不会继续往下执行。

new ServerInit();


运行效果如下,我们会发现在debug目录下会自动生成一个日志文件:2022-09-14 14 log.txt

log.gif


QQ截图20220914141542.jpg


到这里,我们的一个简易log系统就完成了。

3、添加百度地图页面
5、添加mysql数据存储

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

添加后台日志系统 - (第四讲)

视频讲解如下:


工程源码下载:GPS定位系统系列教程源码下载

        

        今天这个章节给大家讲讲如何实现一个简单的日志系统,日志的存储方式一般分为两种,一种是文本文件的方式,另一种则是数据库的方式。今天要讲的是如何将系统的运行日志存储到文件中。

       日志系统的原理其实也很简单,就是采用ConcurrentQueue队列将所有需要存储的日志进行缓存,在每次往队列里面添加日志时,都发送一个消息告诉线程需要写文件了,线程一旦接收到消息,就不停的从队列中提取出日志信息,并写到文件,当然了,你也可以把它写到数据库里面,都是可以的。

       日志系统的类文件我们取名为:LogHelper.cs,我们新建一个comm目录,将我们的LogHelper.cs文件放在该目录下面,LogHelper.cs文件代码如下:

using System.Collections.Concurrent;

namespace WebApplicationGPS.comm
{
    public static class LogHelper
    {
        /// <summary>
        /// 添加并发队列,存储所有的日志信息
        /// </summary>
        private static readonly ConcurrentQueue<string> _que = new ConcurrentQueue<string>();

        /// <summary>
        /// 设置线程同步事件,通知线程进行日志写操作
        /// </summary>
        private static readonly ManualResetEvent _mre = new ManualResetEvent(false);

        /// <summary>
        /// 启动线程
        /// </summary>
        public static void Start()
        {
            new Thread(new ThreadStart(ThreadLog)) { IsBackground = false }.Start();
        }

        /// <summary>
        /// 外部调用,往队列里面写日志信息,同时发出信号,通知线程开始写文件
        /// </summary>
        /// <param name="data"></param>
        public static void WriteLog(string data)
        {
            try
            {
                if (data == null || data == "") return;
                // debug
                System.Diagnostics.Debug.WriteLine(data);
                // 往队列写数据
                _que.Enqueue($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}:{data}\r\n");
                // 发出信号,通知线程开始写文件
                _mre.Set();
            }
            catch { }
        }

        /// <summary>
        /// 日志文件写线程
        /// </summary>
        private static void ThreadLog()
        {
            while (true)
            {
                try
                {
                    // 创建目录,放循环里面,如果目录被意外删除了,也能恢复
                    string path = AppDomain.CurrentDomain.BaseDirectory + @"\logs";
                    if (!Directory.Exists(path)) Directory.CreateDirectory(path);

                    while (true)
                    {
                        // 按每小时一个文件的周期进行日志存储
                        string filePath = Path.Combine(path, DateTime.Now.ToString("yyyy-MM-dd HH") + " log.txt");
                        _mre.WaitOne(); // 阻塞线程,直到调用Set方法才能继续执行
                        while (_que.Count > 0 && _que.TryDequeue(out string msg))
                        {
                            // 不停的写文件
                            File.AppendAllText(filePath, msg);
                        }
                        _mre.Reset(); // 释放信号,等待下次信号到达
                        Thread.Sleep(1);
                    }
                }
                catch { }
            }
        }
    }
}


日志系统的方法文件已经有了,这时就需要测试我们的日志了。

首先我们需要新建两个文件:

ServerInit.cs:用于初始化整个系统的后台程序,包括日志系统、数据库、TCP通讯等。

APP/Service.cs:位于APP目录下,主要为我们的后台线程应用程序,在当前项目中其实是用不到它的,我们这里用它来演示我们的日志功能。


新增App目录结构和Service.cs、ServerInit.cs文件内容如下:

QQ截图20220914140243.jpg


Service.cs 代码如下,实现的效果就是每秒写一次日志。

using WebApplicationGPS.comm;

namespace WebApplicationGPS.APP
{
    public class Service
    {
        /// <summary>
        /// 后台应用程序入口
        /// </summary>
        public void TaskService()
        {
            try
            {
                while (true)
                {
                    Thread.Sleep(1000);
                    LogHelper.WriteLog($"写日志:{DateTime.Now.ToString()}");
                }
            }
            catch { }
        }
    }
}


ServerInit.cs 代码如下:

using WebApplicationGPS.APP;
using WebApplicationGPS.comm;

namespace WebApplicationGPS
{
    public class ServerInit
    {
        public ServerInit()
        {
            // 启动日志系统
            LogHelper.Start();

            // 启动后台应用程序
            AppStart();
        }

        /// <summary>
        /// 启动后台应用
        /// </summary>
        private void AppStart()
        {
            new Thread(() =>
            {
                Service app = new Service();
                while (true)
                {
                    app.TaskService();
                    Thread.Sleep(1000);
                }
            })
            { IsBackground = true }.Start();
        }
    }
}


ServerInit文件目前还不能被系统调用,所以我们需要在Program.cs中添加对ServerInit的调用,起到初始化的作用。

添加方法也很简单,直接在Program.cs的app.Run();前面追加如下代码,并补上相应的引用即可。

注意:一定要加在app.Run();的前面,系统启动时会停在app.Run();位置,并不会继续往下执行。

new ServerInit();


运行效果如下,我们会发现在debug目录下会自动生成一个日志文件:2022-09-14 14 log.txt

log.gif


QQ截图20220914141542.jpg


到这里,我们的一个简易log系统就完成了。