java.util.logging自定义打印日志

来源:互联网 发布:淘宝店技巧 编辑:程序博客网 时间:2024/06/10 06:27

知识准备(如有不全,请查看jdk的api):

1、 Logger
属性
Filter 获取或设置过滤器以控制此 Logger 的输出。
Level 获取或设置为此 Logger 指定的日志级别(Level)。
Name 获取此 Logger 的名称。
UseParentHandlers获取或设置此 Logger 是否应该将其输出发送到它的父 Logger。
UseParentLevel获取或设置此 Logger 是否继承其父的日志级别(Level)。
方法
AddHandler(Handler)添加一个日志 Handler 以接收日志记录消息。
Config(String)记录一条 Config 消息。
Fine(String)记录一条 Fine 消息。
Finer(String)记录一条 Finer 消息。
Finest(String)记录一条 Finest 消息。
GetHandlers 获得与此 logger 相关的所有 Handler。
GetLogger(String)查找或创建一个指定名称的 Logger。 如果已经创建了具有给定名称的 Logger,则返回该 Logger。否则创建一个新的 Logger。
GetLogger(String, ResourceManager)查找或创建一个指定名称和 ResourceManager 的 Logger。 如果已经创建了具有给定名称的 Logger,则返回该 Logger。否则创建一个新的 Logger。
GetParent 返回此 Logger 的父 Logger。
GetResourceManager获取用于本地化日志消息的 ResourceManager。 注意,如果结果为 null,则 Logger 将使用从其父亲继承的 ResourceManager。
GetRootLogger返回根 Logger。
Info(String)记录一条 Info 消息。
IsLoggable(Level)检查给定级别的消息实际上是否由此 logger 记录。
Log(Level, String)记录一条消息。
Log(Level, String, Object)记录带有一个对象参数的消息。
Log(Level, String, Object[])记录带有一组对象参数的消息。
Log(LogRecord)记录一条 LogRecord。
RemoveHandler(Handler)移除一个日志 Handler。
Severe(String)记录一条 Severe 消息。 如果当前对于给定的消息级别而言 Logger 是启用的,那么将给定的消息转发到所有已注册的输出 Handler 对象。 
Warning(String)记录一条 Warning 消息。
2、FileHandler
FileHandler()仅通过 LogManager,使用日志配置信息创建 FileHandler。
FileHandler(String)初始化要写入给定文件名的 FileHandler。
FileHandler(String, Boolean)初始化要写入给定文件名的 FileHandler,并指定是否追加文件。
FileHandler(String, Int32, Boolean)  初始化要写入给定文件名的 FileHandler,并限制了文件大小和是否追加文件。
当使用第一个FileHandler()来创建时,我们可以使用下面的配置模板:
配置:存在配置文件的情况下,每个 FileHandler 都是使用以下设置执行初始化的。
<configuration>
    <appSettings>
        <!--为 Handler 指定默认的级别。-->
        <add key="Shinater.Logging.FileHandler.Level" value="All" />
        <!--指定要使用的 Filter 的类的完全限定名。-->
        <add key="Shinater.Logging.FileHandler.Filter" value="" />
        <!--指定要使用的 Formatter 的类的完全限定名。-->
        <add key="Shinater.Logging.FileHandler.Formatter" value="Shinater.Logging.SimpleFormatter" />
        <!--指定要使用的字符集编码的名称。-->
        <add key="Shinater.Logging.FileHandler.Encoding" value="UTF-8" />
        <!--指定是否应该在每次 Publish 消息之后,将缓冲消息刷新到文件。-->
        <add key="Shinater.Logging.FileHandler.AutoFlush" value="true" />
        <!--为生成的输出文件名称指定一个模式。-->
        <add key="Shinater.Logging.FileHandler.Pattern" value="%ln-%d.log" />
        <!--指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为 0,则没有限制。-->
        <add key="Shinater.Logging.FileHandler.Limit" value="0" />
        <!--指定是否应该将 FileHandler 追加到任何现有文件上。-->
        <add key="Shinater.Logging.FileHandler.Append" value="false" />
    </appSettings>
</configuration>
当使用FileHandler(String)、FileHandler(String, Boolean)、FileHandler(String, Int32, Boolean)来创建时我们可以使用下面的属性和方法来操作FileHandler的初始化
属性
AutoFlush 获取或设置该 Handler 是否在每次 StreamHandler.Publish(LogRecord) 消息之后,将缓冲消息刷新到基础流。 
BaseStream 获取或更改基础流。 
Encoding 获取或设置该 Handler 所用的字符编码。 
Filter 获取或设置 IFilter,以控制该 Handler 的输出。 
Formatter 获取或设置 IFormatter。Formatter 将用于格式化该 Handler 的 LogRecords。 
IsClosed 返回 Handler 是否被关闭,如果被关闭,就应该忽略传入的任何 LogRecord。 
Level 获取或设置日志级别,指定该 Handler 所记录的信息级别。将放弃低于该值的信息级别。 
方法
Close 关闭 Handler,并释放所有相关的资源。 
Dispose 关闭 Handler,并释放所有相关的资源。 
Flush 刷新所有缓冲消息。 
IsLoggable(LogRecord)检查该 Handler 是否实际记录给定的 LogRecord。 
Publish(LogRecord)发布 LogRecord。

简单的demo
生成日志的工具类,类名为LogUtis
public class LogUtils {    
    public Logger createLog() throws IOException{  
        Logger log = Logger.getLogger("tesglog");  //创建一个唯一的log标志,一般用类的名称  
        log.setLevel(Level.ALL);  //设置日志级别
        FileHandler fileHandler = new FileHandler("testlog.log",true);  //生成testlog.log的日志文件,文件是可追加的
        fileHandler.setLevel(Level.ALL);  //设置日志级别
        fileHandler.setFormatter(new LogFormatter());  //设置日志格式
        log.addHandler(fileHandler);  
        return log;
    } 
  
}   
class LogFormatter extends Formatter {  
    @Override  
    public String format(LogRecord record) {  
        Date date = new Date();  
        String sDate = date.toString();  
        return "[" + sDate + "]" + "[" + record.getLevel() + "]"  
                + record.getClass() + record.getMessage() + "\n";  
    }  
}
测试Log工具类
public class testLog {
public static void main(String[] args) throws IOException {
LogUtils logUtils=new LogUtils();
Logger log=logUtils.createLog();
log.info("插入日志1"); //插入的日志内容
}
}
测试结果
控制台
十月 09, 2015 10:08:20 下午 Log.testLog main
信息: 插入日志1
testLog.log文件
[Fri Oct 09 21:57:43 CST 2015][INFO]class java.util.logging.LogRecord插入日志1
[Fri Oct 09 22:08:20 CST 2015][INFO]class java.util.logging.LogRecord插入日志1

0 0
原创粉丝点击