本文讲Java内置的java.util.logging软件包中的 api。主要解释怎样使用该api添加logging到你的application中,怎样加配置它等。但是本文不谈你应该把什么东西写到日志中。

Note :本文谈到的api是Java 6中的。不涉及其他流行的Java logging api(比如Log4J, SLF4J, Apache Commons Logging, LogBack 等)。它只关注Java内置的API。

如果你能够选择你自己的logging api,你也许可以选择上面提到的流行api。但是,如果你像我一样,正在开发Google APP Engine上的web应用,那么你不得不使用java.util.logging。

Java Logging: 综述

下图是Java Logging API工作的概况示意图:

所有的logging都是通过一个Loger 实例产生的,Logger收集数据,保存到LogRecord。LogRecord转发到Handler。Handler来决定怎么处理这些LogRecord。例如,LogRecord可以写到disk,或者通过网络发送到一个监控系统。

Logger和Handler都可以使用Filter来筛选LogRecord,来决定是否转发。

  • Log Level 每一条message都包含一个log level的标签。这个level是一个整数,用来标识这条message的重要性。数值越大,重要性越高。
  • Logger Hierachy Logger实例按层级组织,底层的Logger获得的信息会转发到祖先Logger。因此,log level 和 messages 可以被筛选,或者选择是否接受整个Logger分支。
  • LogManager 用来控制Logger hierarchy, 同时还管理一个全局的日志配置文件。

Java Logging: 基本使用方法

通常的做法是,在需要添加日志的类中创建一个 static final的Logger 实例,所有该类的对象共享该实例。例子如下:

public class LoggingExamples {

    private static final Logger logger =
Logger.getLogger(LoggingExamples.class.getName()); // 通常把该类的全名作为Logger的名字
  public void doIt() {
logger.entering(getClass().getName(), "doIt"); try{
//... something that can throw an exception
} catch (Exception e) {
logger.log(Level.SEVERE, "Error doing XYZ", e);
} logger.exiting(getClass().getName(), "doIt");
}
}

Java Logging: Logger类

为了产生一条message,你可以调用以下方法:

//log 组产生指定level上的message
log (Level level, String message);
log (Level level, String message, Object param1); //对象信息被插入到message中
log (Level level, String message, Object[] params); //示例: logger.log(Level.SEVERE, "Hello logging: {0}, {1}",     new Object[] {"P1", "P2"}); 注意传参数的格式 log (Level level, String message, Throwable t); log (LogRecord record);

//在log()的基础上增加了sourceClass和sourceMethod俩个参数,用来说明这条message产生自那个类的那个方法。
logp (Level level, String sourceClass, String sourceMethod, String msg);
logp (Level level, String sourceClass, String sourceMethod, String msg,
Object param1);
logp (Level level, String sourceClass, String sourceMethod, String msg,
Object[] params);
logp (Level level, String sourceClass, String sourceMethod, String msg,
Throwable t);

//在logp()基础上增加了bundle。Resource bundle是一些键值对,主要用于国际化
logrb(Level level, String sourceClass, String sourceMethod,
String bundle, String msg);
logrb(Level level, String sourceClass, String sourceMethod,
String bundle, String msg, Object param1);
logrb(Level level, String sourceClass, String sourceMethod,
String bundle, String msg, Object[] params);
logrb(Level level, String sourceClass, String sourceMethod,
String bundle, String msg, Throwable t); entering(String sourceClass, String sourceMethod);
entering(String sourceClass, String sourceMethod, Object param1);
entering(String sourceClass, String sourceMethod, Object[] params); exiting (String sourceClass, String sourceMethod);
exiting (String sourceClass, String sourceMethod, Object result); fine (String message);
finer (String message);
finest (String message); config (String message);
info (String message);
warning (String message);
severe (String message); throwing(String sourceClass, String sourceMethod, Throwable t); //几个重要的函数
void addHandler(Handler handler) Add a log Handler to receive logging messages. 每一个Handler可以调用setFormatter函数设置输出格式
void setFilter(Filter newFilter) Set a filter to control output on this Logger.
void setLevel(Level newLevel) Set the log level specifying which message levels will be logged by this logger.

原文地址:在这里

【译文】Java Logging的更多相关文章

  1. java.logging的重定向?

    接着昨天的工作. 上面说要重定向java.util.logging.Logger的输出, 发现也不是不可能. package jmx; import java.util.logging.FileHan ...

  2. Java Se: Logging 框架说明

    Java Logging 用惯了log4j等日志工具,竟然不知Java还自带了个log工具.今天有空了就来了解一下. 先来看一个简单的例子: public class SystemTest { pri ...

  3. Java中的日志——Java.util.logging、log4j、commons-logging

    Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging.其中log4j和commons-loggin ...

  4. Java 9 模块化(Modularity)

    JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...

  5. [翻译]Java日志终极指南

    本文由 ImportNew - Wing 翻译自 loggly.欢迎加入翻译小组.转载请见文末要求. Java日志基础 Java使用了一种自定义的.可扩展的方法来输出日志.虽然Java通过java.u ...

  6. top 10 tipis on Logging in Java- Tutorial (翻译)

    开篇废话,就记得出国之前有一回腾讯面试,面试官说既然你都快要出国了,英语肯定挺不错的,那为什么不去翻译一些国外好的文章呢,我希望找一个能主动学习的人,一直受教.目前在实习,需要做大数据相关方向,都是挺 ...

  7. Java 9终于要包含Jigsaw项目了

    当Jigsaw在Java 9中最终发布时,这个项目的历史已经超过八年了. 转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0228/180.html? ...

  8. How to do logging in C# with log4net

    If you are writing server code in C# or to a lesser extent desktop/client then it's a good idea to i ...

  9. (部署新java程序,程序报错,需copy的一个包)——java使用siger 获取服务器硬件信息

    mcat-siger.sh  查看是否安装siger rsync -aPuv /usr/lib64/libsigar-amd64-linux.so $i:/usr/lib64/ java使用siger ...

随机推荐

  1. Ubuntu的个个版本代号

    首先版本号跟发布日期有关,.04 为 4月份发布,.10 则在10月份发布.另外每个版本都会选一个动物作为代号,下面是 Ubuntu 从 4.10 开始的版本代号和对应动物: Ubuntu Warty ...

  2. C#/winform 自动触发鼠标、键盘事件

    要在C#程序中触发鼠标.键盘事件必须要调用windows函数. 一.鼠标事件的触发 1.引用windows函数mouse_event /// <summary> /// 鼠标事件 /// ...

  3. OpenFlow:Enabling Innovation in Campus Networks

    SDN领域,OpenFLow现在已经成为了广泛使用的南向接口协议.若想好好学习SDN,在这个领域有所进步,需要熟悉OpenFlow协议.我最近找了篇有关OpenFLow的论文,发现最早该协议是在Sig ...

  4. AJAX提交方法(GET)Demon

    AJAX作为一种异步的Javascript程序执行方法,极大的弥补了HTTP协议的不足(HTTP协议为无状态协议),可以无需加载整个页面,只需加载所需数据即可,浏览器内置的XMLHttp对象有open ...

  5. 使用scrollpagination实现页面底端自动加载无需翻页功能

    当阅读到页面最底端的时候,会自动显示一个"加载中"的功能,并自动从服务器端无刷新的将内容下载到本地浏览器显示. 这样的自动加载功能是如何实现的?jQuery的插件 ScrollPa ...

  6. Understanding Binomial Confidence Intervals 二项分布的置信区间

    Source: Sigma Zone, by Philip Mayfield The Binomial Distribution is commonly used in statistics in a ...

  7. 【转】【MySql】MySql优化要点

    如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候NoSQL的出现暂时解决了这一危机 ...

  8. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题

    庞大的业务系统,特别是需要有离线作业操作支持的核心业务系统,需要有强大的基础数据同步功能,基础数据有在增加.有在变动.有在失效,同时有大量的客户端全天侯的在连接服务器.不间断的在处理核心数据. 经过2 ...

  9. 超棒的javascript移动触摸设备开发类库-QUOjs

    开发手机端网站.少不了手势事件? 手势事件怎么写? 手势事件怎么去判断? 对于新手来说.真的很Dan碎! 下面为大家推荐一款插件QUOjs 官方网站http://quojs.tapquo.com/ 这 ...

  10. <转>打工与乘公交

    打工与乘公交 去一个公司打工就如同上了一辆公交车.在上车之前,你应该清楚自己打算去哪里,打算在哪里下车. 有的公交车很豪华,有的很破烂,但是这并不是重点,所有能开到目的地的车都是好车. 上了车之后,也 ...