用于组合许多日志文件的工具的良好设计模式

时间:2015-10-23 20:12:28

标签: design-patterns strategy-pattern

我有很多不同格式的日志文件。每个日志文件都有不同类型的数据,我可以从中获取日志消息的时间和来源以及其他详细信息。

我需要将所有日志消息组合成一个具有我自己格式的大日志文件,并且应该按日志消息的时间进行排序。

我还计划为该工具实现GUI和命令行界面。

战略模式是否是一个很好的设计策略?既然我想开发一个CUI以及一个GUI,那么策略模式是否合适呢?

2 个答案:

答案 0 :(得分:1)

可以将问题分成多个较小的问题。

  • 日志文件读取
  • 日志文件解析
  • 合并日志文件
  • 显示合并日志

日志文件读取 日志文件可以来自多个来源。它可以是本地文件,也可以是网络上的某个位置。读者可能是有状态的对象,它们记住文件大小和它们当前所处的位置。日志文件位置的一个示例可以是http://myserver.mycompany.com/logs/job.log可以为读者创建接口,然后为多个实现创建接口。给定日志文件位置,可以利用Factory模式创建正确的实现。

日志文件解析 一旦原始数据在某个内存块中可用,就应该对其进行解析。这里可以使用Composite模式:log有多个日志行,它有多个日志列。

合并日志文件 当有多个已解析的日志可用时,需要将它们组合成一个。假设每个日志行都有一个带有时间戳的日志列,按时间列对行进行排序非常简单。

显示合并日志 假设在这个阶段,我们已经获得了一个带有行和列的组合日志,很容易在选择的显示技术中使用这个数据模型,无论是控制台还是GUI。

答案 1 :(得分:0)

似乎问题的唯一可变部分是输入文件的格式。这意味着您可以使用factory来获取正确的解析器。

  1. 阅读文件
  2. 根据文件内的内容确定日志格式。使用factory返回正确的解析器。
  3. 最简单形式的工厂看起来与此类似

    if(someIdicatorFromFile.equals("oneTypeOfFormat"){
        return new ParserForFormatOne();
    }
    else if(someIdicatorFromFile.equals("otherTypeOfFormat"){
        return new ParserForOtherFormat();
    }
    
    1. 在此步骤之后,您不会需要任何模式。它只是致电parser.parse()。解析器应返回一些通用格式。
    2. 显示结果