出现的问题

实验中要求用log记录所有出现的异常情况和主程序的各个操作,但我们主程序里的各个操作是调用的是各个类的方法,如果全部在各个类里只抛出异常在主程序里处理,那主程序就会很冗余,而且也不符合ADT“自己的事自己干”的思想,一般我们向上抛出的异常是这个类处理不了的,所以我的想法是在各个类中就用try catch语句处理当下出现的异常,那就需要在各个类中就用log记录,一开始我是在在每个类都写上这么一段代码

Logger log = Logger.getLogger("log");

Calendar current = Calendar.getInstance();

FileHandler filehandler = new FileHandler("src/Logging/logging");

current.setFirstDayOfWeek(Calendar.MONDAY);

log.setLevel(Level.INFO);//设置级别

log.addHandler(filehandler);

//将异常信息输出到logging文件中显示出来

```java

current = Calendar.getInstance();

log.warning("发生时间:" + current.getTime().toString() + " 异常类型:NotdependencyrelationException" +

" 类名:FileLoader" + " 方法名:readFlightInfo" + " 具体异常信息:" + e.toString1() + " 处理结果:忽略该条命令行所在的航班计划项");

//在catch语句中写log

我原本以为我在哪几个类中写了这样的语句,程序运行时就会出现几个logging文件,我可以分别在logging文件中查看各种异常情况,但是运行时出现了问题:

并不是我运行一次主程序就只出现一个相应类中的logging文件,而是每一次我调用类,就会生成一个logging文件,只是后缀名改变,logging.1;logging.2;logging.3…而且伴随出现的还有logging.lck这个迷惑玩意儿。

可想而知,实验中输入是一个文件,文件里有十几万个对象需要调用不同类的方法,每一次调用出现两个logging文件,一瞬间直接给我弄死机。然后我就先考虑 .lck是个什么鬼。

logging.lck

见名思意,.lck表示的就是lock锁的含义,意思是一旦生成logging文件就锁住它,只有该进程结束了才释放它,这个锁其他进程不能获取,也就不能写进去东西。什么是进程结束就是主程序结束。所以在主程序没有结束前,我每调用一次类中方法就生成一个logging文件并且锁住它,下一次再生成一个新的文件和.lck文件。这就是问题的原理,好,这样肯定不对,下面说出我解决问题的思路和走的山路十八弯。

解决问题

一开始我就想那就不要锁住,每次调用都写进一个logging文件中,那就不会出现文件爆炸的情况,事实上通过查阅资料确实是有这样的方法的。在记录日志后写代码如下:

for(Handler h:log.getHandlers())

{

h.close(); //must call h.close or a .LCK file will remain.

}

这样就可以了,但又有新的 问题,这不是实验要求的结果呀,实验中还需要对所有异常情况有查询功能,这样文件中永远只有一种操作上的异常,不能保留所有操作的异常,就没办法查询了。显然pass掉这种方法。

我就开始想,之所以每次都会生成logging文件,就是因为这句语句

FileHandler filehandler = new FileHandler(“src/Logging/logging”);

log.addHandler(filehandler);

如果没有这句语句,只保留日志记录的语句,那是把异常情况写到哪里呢,我实验一下,删除所有类中的FileHandler语句,只保留主程序的,结果令我惊喜。所有其他各个类中方法的异常情况全部写到了主程序的logging文件中,而且因为主程序只会生成一个logging文件也不会存在生成无数文件的情况,那这样就可以实现日志查询功能了,只要在所有操作后查询一个logging文件就可以按照过滤条件输出所有满足条件的异常。完美。

小结

这里面显然涉及了线程安全,锁的机制,日志等java知识,我讲的主要还是如何实操以及根据实验得到的一些最浅显的原理,里面真正的原理型知识需要特别学习相关java知识才可以掌握,不然基层东西不了解,写代码会遇到很多你想破头脑都想不出来的bug。

java .lck文件_关于Java日志log.lck文件的出现原因和关闭方法相关推荐

  1. java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置

    一: ini文件 ini目前只用处存储浏览类型及需要打开的url,ini文件放在configs文件夹下面. 读取ini代码如下: 1 packagetoolskit.documents;2 3 imp ...

  2. java怎么抓取测试apk日志_Android测试日志文件抓取与分析

    1.log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb shel ...

  3. java在客户端生成文件_用Java编写创建一对客户端/服务器程序,利用数据报将一个文件从一台主机传送到另一...

    展开全部 下面是e5a48de588b63231313335323631343130323136353331333337386564我自己写的一个读取并显示txt文件的demo,希望对您有帮助. pu ...

  4. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  5. java 流 复制文件_【Java】使用字节流复制文件

    其实用java程序复制文件并不难 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOE ...

  6. java itext 导出pdf文件_【Java,PDF】使用Itext实现PDF文件生成

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 前言 有时候,业务系统要求提供一个PDF文件导出的功能,这时候我们就需要将数据库的对应数据查询出来,然后生成 ...

  7. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  8. java 删除压缩zip文件_从ZIP存档中删除文件,而无需在Java或Python中解压缩 - java...

    从ZIP存档中删除文件,而无需使用Java(首选)或Python解压缩 你好 我使用包含数百个高度压缩的文本文件的大型ZIP文件.解压缩ZIP文件时,可能要花一些时间,并且很容易消耗多达20 GB的磁 ...

  9. java剪切txt文件_用Java把剪切板的内容实时保存到txt

    test类:提示用户程序已启动,提示保存位置,清空剪切板. package com.ariya.service; import com.ariya.service.impl.ClipboardServ ...

最新文章

  1. 保持图片和图片框一致的方法 收藏
  2. Abstract Factory抽象工厂模式
  3. __declspec(selectany)的作用
  4. 发送请求_发送soap请求调用WSDL
  5. window下的SCROLLbar的使用技巧
  6. VUE3搞一下数据录入
  7. Effective系列经典著作,铺就程序员殿堂之路
  8. GitHub 添加 SSH keys
  9. [DSF] Devices Syndication Foundation Architecture V1
  10. SSD1306 - OLED显示屏
  11. Java之XML转Json
  12. 程序员该如何释放压力
  13. php怎么防止页面被劫持,完美解决网页被劫持的问题,再也不用担心网页被篡改了!...
  14. JavaScript根据用户输入动态计算周数
  15. 一个故事带你了解集线器、交换机与路由器
  16. TEWA-600AEM天翼光猫超级管理员密码获取
  17. 四川大学计算机专业调剂,2019年四川大学计算机学院(软件学院)考研调剂信息
  18. C编译报错: implicit declaration of function xxx is invalid in C99 [-Wimplicit-function-declaration]
  19. Support for the experimental syntax 'decorators-legacy' isn't currently enabled 异常解决
  20. pop3 smtp iamp

热门文章

  1. php 获取 客户端,php获取客户端(系统,浏览器)信息
  2. 通过iclutch、以及class-dump逆向出ios上app的类定义及头文件
  3. 憨豆爱编程之python来整蛊
  4. python readline_python的readline()函数
  5. distinct 去重复,group by 数据分组,还是说拿起就用篇--2(嗯算是吧。)
  6. 关于显示器分辨率和和缩放与布局的问题,根据UI设计图却发现屏幕放不下
  7. Python入门-运算符
  8. 知识付费项目,无本生意,月入1万+,最适合小白操作的项目
  9. 2022春招Web前端高频面试题(自用,附答案)
  10. 如何判断一个友情链接的质量