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

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

  • 编程语言 >

  • 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 图标 Vue - Ant Design官方
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
GPS定位-EC-01G
ASP.NET GPS定位系统介绍(物联网) GPS定位EC-01G模块系列教程源码下载页(物联网) 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、asp.net发布\winform\wpf版本操作流程 18、GPS协议与AT命令流程说明
3、添加百度地图页面
5、添加mysql数据存储
激萌の小宅 小宅博客 GPS定位-EC-01G

文章作者:激萌の小宅

促销:¥0

价格:¥0

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

    有效期

  • 0

    总销量

  • 0

    累计评价

添加后台日志系统

参考视频如下,视频来源《GPS定位系统-MVC-添加后台日志系统》

备注:视频中的部分操作可能会因为Visual Studio的版本差异有所不一样,总体操作流程都是一样的,请自行尝试。视频中采用的是安信可的A9G模块,和当前系列使用的EC-01G模块在AT指令上可能存在差异,这里以博客内容为主,视频主要是讲操作流程。


工程源码下载:GPS定位EC-01G模块系列教程源码下载页(物联网)

IDE环境:Visual Studio 2022

        

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

       日志系统的原理其实也很简单,就是采用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-2026 版权所有

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

文章作者:激萌の小宅

促销:¥0

价格:¥0

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

    有效期

  • 0

    总销量

  • 0

    累计评价

添加后台日志系统

参考视频如下,视频来源《GPS定位系统-MVC-添加后台日志系统》

备注:视频中的部分操作可能会因为Visual Studio的版本差异有所不一样,总体操作流程都是一样的,请自行尝试。视频中采用的是安信可的A9G模块,和当前系列使用的EC-01G模块在AT指令上可能存在差异,这里以博客内容为主,视频主要是讲操作流程。


工程源码下载:GPS定位EC-01G模块系列教程源码下载页(物联网)

IDE环境:Visual Studio 2022

        

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

       日志系统的原理其实也很简单,就是采用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系统就完成了。