原生Logger的logging.properties配置文件浅析

       这篇文章主要讲解一下Java自带的日志系统的配置文件。

java.util.logging的默认的 logging.properties 存放在 jre/lib/logging.properties下,但是这个文件是不可编辑的。如果我们想测试一下这里面的配置项。我们得把这个文件复制拷贝出来,我把它复制出来放到了/Users/kun/Desktop/littleworld/logging.properties 下。启动程序之前,需要设置 VM arguments:-Djava.util.logging.config.file=/Users/kun/Desktop/littleworld/logging.properties 。这样启动后就会加载你所指定的属性文件了。

     

       我主要想讲的是把日志输出到本地文件的相关配置知识,而日志系统默认的处理器(Handler)是ConsoleHandler,我一开始直接把配置文件中的handler设成FileHandler,这样就导致了只会在日志文件输出日志,而不在控制台中输出了。

# "handlers" specifies a comma separated list of log Handler
# classes.  These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
handlers= java.util.logging.ConsoleHandler

     

        后来发现下面还有一行说明,意思是同时在文件和控制台打印日志,默认是被注释掉的,把它放开即可。

# To also add the FileHandler, use the following line instead.
handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

       

       那么保存日志的文件放在哪里呢?还是来看配置文件

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 500
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter

        java.util.logging.FileHandler.pattern = %h/java%u.log 这个就是日志文件名模式,可以在这里指定日志文件存放的路径与文件名称。其中%u表示系统属性user.home的值。这个就是默认情况下日志文件的存储路径了,你也可以通过System.getProperty("user.home");来看一下这个值到底是什么。%u用来解决冲突的唯一性标号。那么javan.log就是默认的日志文件名了。

       

       当我们打开日志文件的时候,会发现日志文件是通过XML的格式来保存的,很显然这不是我们想要的格式。我们可以把下面的XMLFormatter改成SimpleFormatter即可。

java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

       

        当我们多次打印日志的时候发现它总是保存着最近一次被打印出来的日志,之前的日志都被覆盖了,我们在配置文件中加上即可。

java.util.logging.FileHandler.append = true

       

       那一个日志文件到底有没有大小限制呢? 下面的配置表示在打开另一个文件之前允许写入一个文件的近似最大字节数(0表示无限制)。当超过容量之后之前的内容就会被覆盖。

java.util.logging.FileHandler.limit = 50000

       

       我们会发现当前的日志总是在一个文件下,超过容量之前的内容就会被覆盖。下面的配置表示在循环列表中的日志记录数量,1表示不循环。日志文件会以java%u.log.0,java%u.log.1,java%u.log.2,这种循环序列的形式出现。只要文件超出了大小限制,最旧的文件就会被删除,其他的文件将重新命名,同时创建一个新文件,其编号为0。

java.util.logging.FileHandler.count = 3

   

      下面再讲一下刚开始配置测试全局属性时候遇到的一个小坑。本来想通过配置下面的属性去设置全局日志打印的级别,我一开始是这样设置的 

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level=fine

       

       首先就是控制台报错:

Bad level value for property: .level

      查了一下资料,发现是fine写错了,应该是全部大写的。所有有效的级别配置(从高到低):SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL, OFF。解决了这个之后,发现这个配置还是没有生效,仅仅这样设置日志记录,也只是打印info级别以上的日志,因为这是处理器的任务,默认情况下处理器是ConsoleHandler,处理器也有级别。Global level的注释中也有说到:Global level会被其他处理的配置覆盖。要想在控制台上看到FINE级别的消息,需要进行下列设置ConsoleHandler的级别,默认为INFO。这样就可以在控制台看到FINE级别以上的日志了。

java.util.logging.ConsoleHandler.level = FINE

       

       上面就是对日志属性配置文件的一些相关内容,给各位老铁说一下:提升一下自己英文的阅读能力,对你自己的学习是有极大的帮助的。最后,有疑问?下方留言哦!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值