Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LocalDateTime不工作-没有任何类型的错误_Java_Logging - Fatal编程技术网

Java LocalDateTime不工作-没有任何类型的错误

Java LocalDateTime不工作-没有任何类型的错误,java,logging,Java,Logging,我正在开发一个Java项目,一个日志分析器,它以一种通用的方式导入任何类型的日志信息。 实际上,我在日志类实例中划分了任何日志表,在事件类实例中划分了任何工作表行。 问题是:日志读取所有工作表,并在每个读取行中引用一个事件,将其放入LinkedHashSet。 构建事件时,它需要所有信息(例如事件发生的时间),具体取决于它所处的日志类型。 除了从事件字符串中获取日期/时间之外,其他一切工作都完美无缺 事实上,在没有任何错误的情况下,日志的添加事件周期将停止。 删除每一条与时间相关的行,我就能正确

我正在开发一个Java项目,一个日志分析器,它以一种通用的方式导入任何类型的日志信息。 实际上,我在日志类实例中划分了任何日志表,在事件类实例中划分了任何工作表行。 问题是:日志读取所有工作表,并在每个读取行中引用一个事件,将其放入LinkedHashSet。 构建事件时,它需要所有信息(例如事件发生的时间),具体取决于它所处的日志类型。 除了从事件字符串中获取日期/时间之外,其他一切工作都完美无缺

事实上,在没有任何错误的情况下,日志的添加事件周期将停止。 删除每一条与时间相关的行,我就能正确地获得所有内容:有了它们,它停止了,没有任何错误,但使我只能得到一堆行,而不是我应该得到的数千行

在这里,您可以找到日志和事件类,甚至可以找到从事件中获取时间的方法和事件的最后一行管理获取时间,而第一行不管理获取时间

日志:

线路示例(首先正确工作,而不是后者):

  • 你不应该吞下异常——如果你让它传播,你会得到一条非常自解释的异常消息,这会帮助你发现问题

    java.time.DateTimeException:DayOfMonth的值无效(有效值1-28/31):0

    因此,您的
    clockString.substring()
    之一没有使用正确的索引

  • 您的
    getTimeFromLine
    方法不必要且复杂,我建议使用
    DateTimeFormatter
    而不是手动解析字符串

  • 建议更换:

    private static final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
    public LocalDateTime getTimeFromLine(String line) {
      String clockString = line.split("\t")[2];
      return LocalDateTime.parse(clockString, fmt);
    }
    

    //在你的捕获中没有真正需要的东西
    ?我不会这么说。这里的代码太多了。请学习介绍一个最小的完整示例,一个。形成这样一个例子就可以回答你自己的问题,解决你的问题。
    public class Evento implements Comparable<Evento> {
    
        private LocalDateTime time;
        private LogType type;
        private String event;
        private Utente user;
    
        public Evento(String event, LogType type) {
            this.event = event;
            this.type = type;
            time = type.getAssociatedLoader().getTimeFromLine(event);
            user = type.getAssociatedLoader().getUserFromLine(event);
        }
    
        public boolean equals(Evento comparedEvent) {
            return event.equals(comparedEvent.getEvent());
        }
    
        @Override
        public int compareTo(Evento comparedEvent) {
            return event.compareTo(comparedEvent.getEvent());
        }
    
        public LocalDateTime getTime() {
            return time;
        }
    
        public String getEvent() {
            return event;
        }
    
        public Utente getUser() {
            return user;
        }
    
        @Override
        public String toString() {
            return event;
        }
    }
    
    @Override
    public LocalDateTime getTimeFromLine(String line) {
        String clockString = line.split("\t")[2];
        return LocalDateTime.of(Integer.parseInt(clockString.substring(0,4)),
                Integer.parseInt(clockString.substring(6,7)),
                Integer.parseInt(clockString.substring(9,10)),
                Integer.parseInt(clockString.substring(11,13)),
                Integer.parseInt(clockString.substring(15,16)),
                Integer.parseInt(clockString.substring(17,19)));
    }
    
    142\twestchester.gov\t2006-03-20 03:55:57\t1\thttp://www.westchestergov.com
    142\tspace.comhttp\t2006-03-24 20:51:24\t\t
    
    private static final DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    
    public LocalDateTime getTimeFromLine(String line) {
      String clockString = line.split("\t")[2];
      return LocalDateTime.parse(clockString, fmt);
    }