java SDK 自带 Logger 的使用

java自带的log虽然比不上log4j那么强大,但是满足日常使用还是绰绰有余,下面是简单介绍:

Logger中有3个比较重要的概念,分别是记录器(Logger)、处理器(Handler)与格式化器(Formatter)分别完成以下功能:

    • Logger:记录日志,设置日志级别等。
    • Handler:确定输出位置等。
    • Fomatter:根据自己的意愿对记录中的信息进行格式化。

创建Logger对象 :

static Logger getLogger(String name) 
static Logger getLogger(String name, String resourceBundleName)

注意:name是Logger的名称,当名称相同时候,同一个名称的Logger只创建一个,如果创建一个同名的,就不是创建,只是返回存在的同名logger.所以这里其实有点单例模式的那种味道,后面的resourceBundleName是指定的资源包的名字,

Logger的级别 

比log4j的级别详细,全部定义在java.util.logging.Level里面。 
各级别按降序排列如下: 
  SEVERE(最高值)   
  WARNING 
  INFO 
  CONFIG 
  FINE 
  FINER 
  FINEST(最低值) 
此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。

logger默认的级别是INFO,Logger的默认级别定义是在jre安装目录的lib下面。 
# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = INFO

比INFO更低的日志将不显示,如果想要显示比INFO更低的,需要修改配置:默认情况下文件存在于jre/lib/logging.properties

比如:想要在控制台上看到FINE级别的消息,进行以下设置:

java.util.logging.ConsoleHandler.level=FINE

简单实例 

 1 import java.io.IOException;
 2 import java.util.logging.ConsoleHandler;
 3 import java.util.logging.FileHandler;
 4 import java.util.logging.Formatter;
 5 import java.util.logging.Level;
 6 import java.util.logging.LogRecord;
 7 import java.util.logging.Logger;
 8
 9 public class logmain {
10     public static void main(String[] args) throws IOException {
11         Logger log = Logger.getLogger("lavasoft");
12         log.setLevel(Level.INFO);
13         Logger log1 = Logger.getLogger("lavasoft");
14         System.out.println(log == log1);     //true
15         Logger log2 = Logger.getLogger("lavasoft.blog");
16         log2.setLevel(Level.WARNING);
17
18         ConsoleHandler consoleHandler = new ConsoleHandler();
19         consoleHandler.setLevel(Level.ALL);
20         log.addHandler(consoleHandler);
21         FileHandler fileHandler = new FileHandler("E://lll.log");
22         fileHandler.setLevel(Level.INFO);
23         fileHandler.setFormatter(new MyLogHander());
24         log.addHandler(fileHandler);
25
26         log.info("aaa");
27         log1.info("cc");
28         //log2.info("bbb");
29         log2.warning("bbb");
30      }
31 }
32
33 class MyLogHander extends Formatter {
34   @Override
35   public String format(LogRecord record) {
36         return record.getLevel() + ":" + record.getMessage()+"\n";
37   }
38 } 

输出如下:

信息: aaa
七月 12, 2016 3:59:37 下午 logmain main
信息: aaa
七月 12, 2016 3:59:37 下午 logmain main
信息: cc
七月 12, 2016 3:59:37 下午 logmain main
信息: cc
七月 12, 2016 3:59:37 下午 logmain main
警告: bbb
七月 12, 2016 3:59:37 下午 logmain main
警告: bbb

D盘里面的log显示如下:

INFO:aaa
INFO:cc
WARNING:bbb

这里的handle决定了怎么去处理这些日志,MyLogHander 决定了格式,没有handle,默认控制台输出,上面的代码等于添加了新的两种输出方式,一种是控制台一种是输出到文本,所以现在是有三种处理方式,其中两种是控制台,这也是为了控制台打印两次的原因。设置格式部分可以不要,不过格式可能会比较丑。handle和formatter详细见下面

Logger的Handler 

Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。

可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。

Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。

Logger的Formatter 
Formatter 为格式化 LogRecords 提供支持。 
一般来说,每个日志记录 Handler 都有关联的 Formatter。Formatter 接受 LogRecord,并将它转换为一个字符串。 
有些 formatter(如 XMLFormatter)需要围绕一组格式化记录来包装头部和尾部字符串。可以使用 getHeader 和 getTail 方法来获得这些字符串。

LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求。 
LogRecord(Level level, String msg) 
          用给定级别和消息值构造 LogRecord。

文章参考:http://sunyuqian.iteye.com/blog/2233655

http://lavasoft.blog.51cto.com/62575/184492

时间: 2024-08-01 12:14:37

java SDK 自带 Logger 的使用的相关文章

大数据技术之_18_大数据离线平台_02_Nginx+Mysql+数据收集+Web 工程 JS/JAVA SDK 讲解+Flume 故障后-如何手动上传 Nginx 日志文件至 HDFS 上

十一.Nginx11.1.介绍11.2.常见其他 Web 服务器11.3.版本11.4.Nginx 安装11.5.目录结构11.6.操作命令十二.Mysql12.1.介绍12.2.关系型数据库(SQL)种类12.3.特征12.4.术语12.4.与非关系型数据库比较(Not Only SQL)12.4.1.种类12.4.2.特征12.4.3.总结十三.数据收集13.1.收集方式13.2.数据的事件类型13.2.1.Launch 事件13.2.2.PageView 事件13.3.Nginx 日志收集

使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及解决方案

import java.io.File; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.Upload; public class U

使用MaxCompute Java SDK 执行任务卡住了,怎么办?

场景一用户AA: "亲,用 MaxCompute Java SDK 跑作业,为什么卡住不动了?"me: "有 Logview 吗?发来看下"A: "没有,我用的是SDK,没Logview" 场景二用户BB :"亲,用 MaxCompute Java SDK 访问 Table,为什么卡住半天没反应?"me:"卡在哪一行了?"B:"就 RestClient retry 然后卡住了" 去繁就简

Nacos系列:Nacos的Java SDK使用

Maven依赖 Nacos提供完整的Java SDK,便于配置管理和服务发现及管理,以 Nacos-0.8.0 版本为例 添加Maven依赖: <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>0.8.0</version> </dependency> 仅仅引入naco

Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j)

Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j) 博客分类: Java综合 第一.Logger.getLogger()和LogFactory.getLog()的区别     1.Logger.getLogger()是使用log4j的方式记录日志:  2.LogFactory.getLog()则来自apache的common-logging包. common-logging组件:         Jakarta Commons

解决Please ensure that adb is correctly located at &#39;D:\java\sdk\platform-tools\adb.exe&#39; and can be executed.

遇到问题描述: 运行android程序控制台输出 [2012-07-18 16:18:26 - ] The connection to adb is down, and a severe error has occured.    [2012-07-18 16:18:26 - ] You must restart adb and Eclipse.    [2012-07-18 16:18:26 - ] Please ensure that adb is correctly located at

&lt;Chapter 2&gt;2-1-2.安装Java SDK

Java运行时环境的App Engine SDK运行在任何运行了Java SE开发工具(JDK)的电脑上.Java SDK App Engine 支持JDK 6,并且当运行App Engine的时候,Java 运行时环境使用Java6的JVM和JRE.(JDK5支持是受限的并且过时了) 如果你还未拥有它,你可以从Oracle的网站上下载和安装适用于大部分平台的Java 6 JDK.(Mac用户,参看下一部分): http://www.oracle.com/technetwork/java/jav

Bug记录:微博的Java SDK返回经纬度错误

现象:美国的坐标点可能会定位到西藏地区-后发现原来负经度经解析后,均变成正的! 源代码: private void getGeoInfo(String geo) { StringBuffer value= new StringBuffer(); for(char c:geo.toCharArray()){ if(c>45&&c<58){ value.append(c); } if(c==44){ if(value.length()>0){ latitude=Double.

使用 MaxCompute(原ODPS) java sdk 运行安全相关命令

转自zhenhong 使用 MaxCompute console 的同学,可能都使用过 odps 安全相关的命令.官方文档上有详细的 odps 安全指南,并给出了安全相关命令列表. 简而言之,权限管理.项目空间安全配置以及用户及授权管理都属于 odps 安全命令相关的范畴. 再直白一点,以下列关键字开头的命令,都是 odps 安全相关操作命令: GRANT/REVOKE ... SHOW GRANTS/ACL/PACKAGE/LABEL/ROLE/PRINCIPALS SHOW PRIV/PRI