系统日志(Java)

1 什么是日志?

日志:顾名思义就是我们程序在运行时一些状态信息,需要显示出来,供我们程序员查看,了解程序在运行过程中出现的种种问题,以便通过这些信息寻找bug,调试项目等等。一个良好的项目,日志是不可或缺的一部分,关于日志的行为标准可查看《阿里巴巴Java开发手册》。

那么回想一下,我们之前是怎么查看变量信息或者查看某些内容的?就是它 System.out.println();

使用它有什么不好的呢?

  • 不能自定义样式

  • 不能自动携带时间戳

  • 输出的信息单一,想要更多的信息,只能自己动手添加

  • 最重要的一点,只能输出到控制台,一旦项目上线后,它输出的内容就看不到了。

想要实现上面这几点功能,我们就要借助日志框架了。使用这些日志框架,

  • 可以设置输出样式,避免自己每次都写"ERROR: " + var

  • 可以设置输出级别,禁止某些级别输出。例如,只输出错误日志;

  • 可以被重定向到文件,这样可以在程序运行结束后查看日志文件;

  • 可以按包名控制日志级别,只输出某些包打的日志;

  • 可以……总之好处多多,方便多多。

2 JDK Logging

JDK Logging,看到这个名字,应该能想象到,这个是JDK提供的日志打印工具,位于java.util.logging包下。

入门案例:




public class Demo {
    public static void main(String[] args) {
        Logger log = Logger.getGlobal();
        log.finest("finest");
        log.finer("finer");
        log.fine("fine");
        log.config("config");
        log.info("info");
        log.warning("warning");
        log.severe("server");
    }
}


输出的内容中,不光包含了我们想要打印的信息,还包含着日期时间,哪个类,哪个方法,错误级别等信息。

再仔细观察发现,7条日志,只打印了3条,其余四条并没有打印。这是因为,日志的输出可以设定级别,通过级别过滤可以控制哪些信息输出,哪些信息不输出。JDK的Logging定义了7个日志级别,从严重到普通:

因为默认级别是INFO,因此,INFO级别以下的日志,不会被打印出来。使用日志级别的好处在于,调整级别,就可以屏蔽掉很多调试相关的日志输出。

如果想要修改日志级别就有点麻烦了,需要找到JDK的安装目录,目录下的conf目录下的logging.properties文件,将文件中下列行的参数进行修改:

java.util.logging.ConsoleHandler.level = INFO
# ALL→FINEST→FINER→FINE→CONFIG→INFO→WARNING→EERVER→OFF
# ALL 全部显示,OFF关闭日志打印
log.setLevel(Level.ALL);

并在代码中,设置日志级别。两个设置缺一不可,否则级别设置不生效。

JDK Logging 不好用的地方不仅修改配置麻烦,系统在JVM启动时读取配置文件并完成初始化,一旦开始运行main()方法,就无法修改配置;而且想要输出打印到文件中,还需要在JVM启动时传递参数-Djava.util.logging.config.file=<config-file-name>

因此JDK Logger除了不需要任何类库支持这个优点之外,相对于其他的日志框架,可谓是鸡肋,无论易用性,功能还是扩展性都要稍逊一筹,所以在商业系统中很少直接使用。

3 Commons Logging

和Java标准库提供的日志不同,Commons Logging是一个第三方日志库,它是由Apache创建的日志模块。

Commons Logging 的特色是,它可以挂接不同的日志系统,并通过配置文件指定挂接的日志系统。默认情况下,Commons Logging 自动搜索并使用Log4jLog4j是另一个流行的日志系统),如果没有找到Log4j,再使用JDK Logging

使用 C

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值