合并当天Log

news2024/11/17 9:35:22
  1. 1.原因

我们程序运行Log很多时,如果因为要写Log话费很多时间,这时我们可以把log保存按照更短的时间保存,比如一分钟一个Log,一个小时一个log,。。。。但我们查看Log时很麻烦,需要把分散的Log合并起来的工具,基于这个,我问了OpenAI,提供了基础方法

  1. 2.下面是聊天的记录:

当然,这是一个注释过的代码示例,以及如何使用它:

using System;
using System.IO;
using System.Linq;
using System.Text;

class Program
{
// 主函数
static void Main(string[] args)
{
// 调用合并日志文件的方法
MergeLogFiles(“C:\Logs\”, “MergedLog.txt”);
}

/// <summary>
/// 合并指定文件夹中当天所有的日志文件
/// </summary>
/// <param name="logDirectoryPath">日志文件的文件夹路径</param>
/// <param name="outputFileName">合并后的日志文件名称</param>
public static void MergeLogFiles(string logDirectoryPath, string outputFileName)
{
    // 获取当天的日期
    var today = DateTime.Today;

    // 获取指定文件夹中的所有日志文件
    var logFiles = Directory.EnumerateFiles(logDirectoryPath, "*.log")
        .Where(file => new FileInfo(file).CreationTime.Date == today);

    // 创建一个StringBuilder来存储所有日志文件的内容
    var stringBuilder = new StringBuilder();

    // 遍历每个日志文件
    foreach (var logFile in logFiles)
    {
        // 读取日志文件的内容并添加到StringBuilder中
        stringBuilder.AppendLine(File.ReadAllText(logFile));
    }

    // 将合并后的内容写入到一个新的文件中
    File.WriteAllText(Path.Combine(logDirectoryPath, outputFileName), stringBuilder.ToString());
}

}
这个MergeLogFiles方法接受两个参数:一个是日志文件的文件夹路径,另一个是输出的文件名。这个方法首先获取指定文件夹中当天的所有日志文件,然后遍历这些文件,读取它们的内容并将内容添加到一个StringBuilder对象中。最后,它将这个StringBuilder对象的内容写入到一个新的文件中。

在主函数中,你可以通过调用MergeLogFiles方法并传递相应的参数来使用这个方法。例如,MergeLogFiles(“C:\Logs\”, “MergedLog.txt”);这行代码将会合并"C:\Logs"文件夹中当天的所有日志文件,并将合并后的内容写入到一个名为"MergedLog.txt"的新文件中。

我看到当天的log时间没有排序,帮我排一下序

删除
重试
复制
当然可以,我们可以在读取文件内容之前,先对文件列表进行排序。这样,合并的日志就会按照时间排序。这里我假设你的日志文件名包含创建时间,格式如:“log_20230715_1030.txt”,也就是 “log_yyyyMMdd_HHmm.txt”。下面是修改后的代码:

using System;
using System.IO;
using System.Linq;

public class LogFileMerger
{
public void MergeTodayLogs(string logDirectory, string outputFilePath)
{
// 获取今天的日期
var today = DateTime.Today;

    // 获取指定目录中的所有文件
    var files = Directory.GetFiles(logDirectory);

    // 选择今天的日志文件,并按照时间排序
    var todayFiles = files
        .Where(f => IsTodayLog(f, today))
        .OrderBy(f => GetTimeFromFileName(f))
        .ToList();

    // 创建一个新的文件用于存储合并后的日志
    using (var outputFileStream = File.CreateText(outputFilePath))
    {
        foreach (var file in todayFiles)
        {
            // 读取每个文件的内容
            var content = File.ReadAllText(file);

            // 将内容写入到新的文件中
            outputFileStream.WriteLine(content);
        }
    }
}

private bool IsTodayLog(string filePath, DateTime today)
{
    // 获取文件名
    var fileName = Path.GetFileNameWithoutExtension(filePath);

    // 从文件名中提取日期
    var datePart = fileName.Substring(4, 8);
    if (DateTime.TryParseExact(datePart, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out var fileDate))
    {
        // 检查文件日期是否是今天
        return fileDate.Date == today;
    }

    return false;
}

private DateTime GetTimeFromFileName(string filePath)
{
    // 获取文件名
    var fileName = Path.GetFileNameWithoutExtension(filePath);

    // 从文件名中提取时间
    var timePart = fileName.Substring(13, 4);
    if (DateTime.TryParseExact(timePart, "HHmm", null, System.Globalization.DateTimeStyles.None, out var fileTime))
    {
        // 返回文件时间
        return fileTime;
    }

    return DateTime.MinValue;
}

}
在这个版本的代码中,我添加了一个新的方法 GetTimeFromFileName 来从文件名中提取时间,并在 MergeTodayLogs 方法中使用 OrderBy 对文件列表进行排序。

请帮我写出使用方法

删除
重试
复制
首先,您需要在您的项目中添加以下代码。这段代码定义了一个名为MergeAndSortLogs的函数,该函数会合并并排序日志文件。

using System;
using System.IO;
using System.Linq;

public class LogMerger
{
public static void MergeAndSortLogs(string directoryPath, string outputFilePath)
{
// 获取目录中所有当天的日志文件
var today = DateTime.Today;
var logFiles = Directory.GetFiles(directoryPath, $“log_{today:yyyyMMdd}_*.txt”);

    // 按照文件名中的时间对日志文件进行排序
    var sortedLogFiles = logFiles.OrderBy(f =>
    {
        var timePart = Path.GetFileNameWithoutExtension(f).Split('_')[2];
        return DateTime.ParseExact(timePart, "HHmm", null);
    });

    // 合并所有日志
    using var outputStream = File.CreateText(outputFilePath);
    foreach (var logFile in sortedLogFiles)
    {
        foreach (var line in File.ReadLines(logFile))
        {
            outputStream.WriteLine(line);
        }
    }
}

}
要使用此函数,您需要提供两个参数:日志文件所在的目录的路径(directoryPath)和输出文件的路径(outputFilePath)。例如,如果您的日志文件位于"C:\Logs"目录中,并且您希望将合并后的日志输出到"C:\MergedLogs\merged.txt",那么您可以按照以下方式调用该函数:

LogMerger.MergeAndSortLogs(“C:\Logs”, “C:\MergedLogs\merged.txt”);
这将会合并"C:\Logs"目录中所有当天的日志文件,并将合并后的日志输出到"C:\MergedLogs\merged.txt"。

请注意,这段代码假设您的日志文件的命名格式为"log_yyyyMMdd_HHmm.txt",并且时间部分(HHmm)是24小时制的。如果您的日志文件的命名格式或时间格式与此不同,那么您需要相应地修改代码。

  1. 3.下面是聊天的截图:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

移动端深度学习部署:TFlite

1.TFlite介绍 &#xff08;1&#xff09;TFlite概念 tflite是谷歌自己的一个轻量级推理库。主要用于移动端。 tflite使用的思路主要是从预训练的模型转换为tflite模型文件&#xff0c;拿到移动端部署。 tflite的源模型可以来自tensorflow的saved model或者frozen model,也可…

ylb-定时任务task

总览&#xff1a; 在api模块service包&#xff0c;创建IncomeService类&#xff1a;&#xff08;收益计划 和 收益返还&#xff09; package com.bjpowernode.api.service;public interface IncomeService {/*收益计划*/void generateIncomePlan();/*收益返还*/void generate…

基于mysql+java+springboot的福州大学生就业求职系统(含源码+系统演示视频)

1、系统演示视频&#xff1a;基于JavaMySQLspringboot的福州大学生就业求职系统演示视频 2、系统源码&#xff1a;系统源码链接 文章目录 一、需求分析1、公司招聘2、简历管理3、交流咨询 二、福州大学就业求职服务平台简介1.福州大学就业求职服务平台主要功能1.1.个人求职功能…

小黑子—JavaWeb:第一章 - JDBC

JavaWeb入门1.0 1. javaweb介绍2. 数据库设计2.1 约束2.2 表关系2.3 多表查询2.3.1 内连接&#xff08;连接查询&#xff09;2.3.2 外连接&#xff08;连接查询&#xff09;2.3.3 子查询 2.4 事务 3. JDBC3.1 JDBC 快速入门 4 JDBC API详解4.1 DriverManager4.2 Conncetion4.3 …

13_Linux无设备树Platform设备驱动

目录 Linux驱动的分离与分层 驱动的分隔与分离 驱动的分层 platform平台驱动模型简介 platform总线 platform驱动 platform设备 platform设备程序编写 platform驱动程序编写 测试APP编写 运行测试 Linux驱动的分离与分层 像I2C、SPI、LCD 等这些复杂外设的驱动就不…

吴恩达ML2022-用于手写数字识别的神经网络

1 用到的包 导入在这个分配过程中需要的所有包。 Numpy 是使用 Python 进行科学计算的基本软件包。Matplotlib 是在 Python 中绘制图形的流行库。tensorflow是一种流行的机器学习平台。 import numpy as np import tensorflow as tf from tensorflow.keras.models import Se…

Java对象导论

对象具有状态、行为和标识。每个对象都可以拥有内部数据&#xff08;它们给出了该对象的状态&#xff09;和方法&#xff08;它们产生的行为&#xff09;&#xff0c;并且每个对象在内存中都有一个唯一的地址&#xff08;标识&#xff09;。 抽象过程就是在问题空间元素和解空…

Macbook下提升开发效率的几个小工具

最近倒腾mac笔记本&#xff0c;记录下一些高效率的工具吧。 首先就是alfred&#xff0c;内置可以自定义各种快捷命令查找&#xff0c;配合Dash来快速查找C系统API&#xff0c;其实Dash中包含了各种编程所需API文档&#xff0c;值得下载。 以前我都是直接查看cppreference.c…

【分享】Redis的五种基本数据类型和应用场景

前言&#xff1a; Redis支持五种基本数据类型&#xff1a; String&#xff08;字符串类型&#xff09;&#xff1a;可以是普通字符串&#xff0c;也可以是整数或浮点数值。可以设置过期时间&#xff1b;可以对字符串进行append、get、set、incr、decr等操作。Hash&#xff08…

【C++】位图和布隆过滤器

文章目录 位图概念难点代码 布隆过滤器概念插入查找删除优缺点代码 位图 概念 所谓位图&#xff0c;就是用每一个比特位位来存放某种状态&#xff0c;适用于海量数据&#xff0c;数据无重复的场景。通常是用来判断某个数据存不存在的。 给40亿个不重复的无符号整数&#xff…

buu_Misc总结2

目录 百里挑一 exiftool: [SUCTF2018]followme grep工具使用&#xff1a; [安洵杯 2019]Attack mimikatz工具使用&#xff1a; 百里挑一 打开文件是流量包&#xff0c;发现里面有很多图片 导出http 另存一个文件夹&#xff0c;里面很多图片&#xff0c;啥也看不出来 &…

医用影像技术

1.X光和CT原理 X光和CT&#xff08;计算机断层扫描&#xff09;都是医学成像技术&#xff0c;用于诊断和治疗。它们的原理如下&#xff1a; X光原理&#xff1a; X光是一种电磁辐射&#xff0c;与可见光类似&#xff0c;但具有更高的能量。当X光通过人体或物体时&#xff0c;…

创作一周年纪念日【道阻且长,行则将至】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; 技术之外的往事 &#x1f383;所处时段&#xff1a; 大学生涯[1/2] 文章目录 一、起点一切皆有定数 二、成果尽心、尽力 三、相遇孤举者难起&#xff0c;众行者易趋 四、未来长风破浪会有时&#xff0c;直挂云…

[MySQL]MySQL表中数据的增删查改(CRUD)

[MySQL]MySQL表中数据的增删查改(CRUD) 文章目录 [MySQL]MySQL表中数据的增删查改(CRUD)1. 新增数据1.1 单列插入1.2 多列插入1.3 插入否则更新1.4 替换 2. 基本查询数据2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 为查询结果指定别名2.5 结果去重2.6 where子句2.7 or…

修复漏洞(二)离线升级Tomcat版本

前言 生产环境无法联网&#xff0c;只能通过下载离线版本更新Tomcat到小版本最新注意Tomcat10和11与jdk1.8都不兼容&#xff0c;只能更新到小版本的最新前提是按照我这种方法配置Tomcat开机自启的https://blog.csdn.net/qq_44648936/article/details/130022136 步骤 备份整个…

IAR编译报错:Error[Pe065: expected a “.“ and Error[Pe007]:unrecognized token

IAR报错 Error[Pe065: expected a “.” and Error[Pe007]:unrecognized token 使用IAR编译报如下错误&#xff1a; 找到软件报错的地方&#xff0c;从肉眼看&#xff0c;并没有错误的地方&#xff0c;如下图所示&#xff1a; 这时肯定是丈二和尚摸不着头脑&#xff0c;这里…

VMware种ubuntu22.04挂载ax88179网卡不显示的问题

网上找了很多解决办法&#xff0c;都说是驱动的问题&#xff0c;其实不是。ubuntu22自带无bug的ax88179的驱动。 其实是Vmware的问题&#xff0c;在虚拟机设置种添加一个usb控制器&#xff0c;然后这样设置就好了。

HCIP第一课实验小练习

目录 题目&#xff1a;​编辑 第一步&#xff1a;地址规划&#xff08;子网划分&#xff09; 第二步&#xff1a;设计拓扑并规划地址配置 第三步&#xff1a;VLAN规划配置 LW1 LW2 第四步&#xff1a;网关配置 第五步&#xff1a;及静态路由配置 第六步防止成环 题目&…

深入理解Linux网络——TCP连接建立过程(三次握手源码详解)

文章目录 一、相关实际问题二、深入理解listen1&#xff09;listen系统调用2&#xff09;协议栈listen3&#xff09;接收队列定义4&#xff09;接收队列申请和初始化5&#xff09;半连接队列长度计算6&#xff09;小结 三、深入理解connect1&#xff09;connect调用链展开2&…

单片机第一季:零基础6——按键

目录 1&#xff0c;独立按键 2&#xff0c;矩阵按键 &#xff08;注意&#xff1a;文章中的代码仅供参考学习&#xff0c;实际使用时要根据需要修改&#xff09; 1&#xff0c;独立按键 按键管脚两端距离长的表示默认是导通状态&#xff0c;距离短的默认是断开状态&#xf…