java.util.logging.Logger
阅读文档的疑问
变量
global 已经弃用了 说初始化的时候容易出现死锁,但是为什么会出现死锁?
GLOBAL_LOGGER_NAME println()后是global
构造器
Logger(String , String ) protected方法,无法使用
方法
addHandler() 不知道怎么导向如下的地方
config() 一个未知的级别,和ALL、FINER应该是同一类,因为输出到xml中是长这样的。
entering(String class, String method) 打印出来是这样的
entering()
fine()
finer()
finest()
getAnonymousLogger() 其中一个resourceBundleName,以logMess_zh_CN为例子,就是其中的logMess,也可以是全名logMess_zh_CN
getFilter() 不理解 , 而且我没有设置Filter,返回的是null
getGlobal() 不知道为什么需要一个全局的记录器 默认没有Handlers,没有Level
getHandlers()
getLevel()
getLogger()
getName()
getParent() 不太理解这个方法。。返回的父级Logger是什么意思 父类是一个LogManager的内部类RootLogger ,Level是INFO
getResourceBundle()
getResourceBundleName()
== getUseParentHandlers() 父级的Handler是一个ConsoleHandler 难怪能够用子级输出到控制台,原来是会输出到父级的ConsoleHandler==
info()
isLoggable()
log()
logp() 这个方法名字中的p是什么意思?是precise准确的意思
logrb()是什么意思?RecourceBundle?猜测是,果然是
removeHandler()
setFilter() 不知道怎么用,也不知道是干嘛用的。
setLevel()
setParent() 不知道设置父级的用处是什么:1、如果本身的Level为null,则会使用父级的Level;2、与LogRecord有关;3、子级的日志也会输出到父级的Handler们中;4、如果没有ResourceBundle的话,会继承父类的ResourceBundle,但是getResourceBundleName()或者getResourceBundle依旧返回null
setResourceBundle()
setUseParentHandler()
severe()
throwing() 不知道是什么等级的日志
warning()
import java.util.logging.*;
import java.io.*;
import java.util.*;
public class Test
{
public static void main(String[] args) throws IOException
{
System.out.println(Logger.GLOBAL_LOGGER_NAME);
Logger logger = Logger.getLogger("abc");
logger.addHandler(new FileHandler("f.xml"));
//写一下,文档中的练习
logger.setLevel(Level.ALL);
logger.log(Level.FINER,"第一条信息"); //会输出到f.xml
logger.log(Level.ALL,"第二条信息"); //不会输出到f.xml
logger.log(Level.ALL,DiagnosisMessages.systemHealthStatus());
logger.log(Level.ALL,DiagnosisMessages::systemHealthStatus);
logger.log(Level.FINER,DiagnosisMessages.systemHealthStatus());
logger.log(Level.FINER,DiagnosisMessages.systemHealthStatus());
logger.config("我是config消息");
logger.config(() -> "config第二条消息");
logger.entering("a","b");
logger.entering("a","b","这是enter消息");
logger.entering("a","b",new Object[]{"美女1","美女2","可爱的美女3"});
logger.exiting("a","b");
logger.exiting("a","b","777");
logger.fine("abc");
logger.fine(Supp::out);
logger.finer("finer");
logger.finer(Supp::out);
logger.finest("finest");
logger.finest(Supp::out);
ResourceBundle bundle = ResourceBundle.getBundle("logMess");
Logger.getAnonymousLogger().log(Level.OFF,"这是匿名的");
Logger.getAnonymousLogger("logMess").log(Level.OFF,"debug");
Filter filter = logger.getFilter();
System.out.println(filter);
//System.out.println(filter.isLoggable(new LogRecord(Level.ALL,"我是LogRecord")));
System.out.println(Logger.getGlobal());
Logger.getGlobal().addHandler(new FileHandler("e.xml"));
logger.addHandler(new FileHandler("e.xml"));
Logger.getGlobal().log(Level.OFF,"这是global记录器");
System.out.println(Arrays.toString(logger.getHandlers()));
System.out.println(Arrays.toString(Logger.getGlobal().getHandlers()));
System.out.println(logger.getLevel());
System.out.println(Logger.getGlobal().getLevel());
Logger logger2 = Logger.getLogger("a55");
Logger logger3 = Logger.getLogger("a88","logMess");
logger2.log(Level.OFF,"debug");
logger3.log(Level.OFF,"debug");
System.out.println(logger.getName());
System.out.println(logger.getParent().getLevel());
System.out.println(logger.getParent());
System.out.println(logger.getLevel());
System.out.println(logger2.getResourceBundle());
System.out.println(logger3.getResourceBundle());
System.out.println(logger2.getResourceBundleName());
System.out.println(logger3.getResourceBundleName());
System.out.println(Arrays.toString(logger.getParent().getHandlers()));
System.out.println(logger.getUseParentHandlers());
Logger logger4 = Logger.getLogger("8673");
logger4.addHandler(new ConsoleHandler());
logger4.log(Level.OFF,"这里是logger4"); //不知道怎么用这个ConsoleHandler,才能控制Level
logger.info("abc");
logger.info(Supp::out);
System.out.println(logger.isLoggable(Level.ALL));
logger.setLevel(Level.INFO);
System.out.println(logger.isLoggable(Level.ALL));
logger.log(Level.OFF,"abc");
logger.log(Level.OFF,"我爱{0}","美女");
logger.log(Level.OFF,"我爱{0}和{1}",new Object[]{"美女","可爱的妹子"});
logger.log(Level.OFF,"我喜欢妹纸",new Throwable("没错"));
System.out.println("接着执行");
logger.log(Level.OFF,Supp::out);
logger.logp(Level.OFF,"Dog","bark","汪汪");
logger.logp(Level.OFF,"Cat","miao","喵喵,{0}","招财");
logger.logp(Level.OFF,"Pig","eat","今天吃{0},加上{1}",new Object[]{"玉米","煎蛋"});
logger.logp(Level.OFF,"Horse","run","小马欢快的跑着",new IOException("越过跨栏"));
logger.logp(Level.OFF,"Bird","fly",new Throwable("飞呀飞"),Supp::out);
logger.logp(Level.OFF,"Mouse","dig",Supp::out);
bundle = ResourceBundle.getBundle("animal");
logger.logrb(Level.WARNING,"Bird","peak",bundle,"look","叼起来","然后跑走");
logger.logrb(Level.WARNING,"Bird","peak",bundle,"look","o","o");
logger.logrb(Level.WARNING,"Bird","peak",bundle,"look",new Throwable("赚到了"));
logger.logrb(Level.SEVERE,bundle,"look","赚到了","赶紧叼走");
logger.logrb(Level.SEVERE,bundle,"look",new Throwable("88"));
FileHandler fh = new FileHandler("g.xml");
ConsoleHandler ch = new ConsoleHandler();
Logger logger6 = Logger.getLogger("www");
System.out.println(Arrays.toString(logger6.getHandlers()));
logger6.addHandler(fh);
System.out.println(Arrays.toString(logger6.getHandlers()));
logger6.addHandler(ch);
System.out.println(Arrays.toString(logger6.getHandlers()));
logger6.removeHandler(fh);
System.out.println(Arrays.toString(logger6.getHandlers()));
logger6.removeHandler(ch);
System.out.println(Arrays.toString(logger6.getHandlers()));
logger6.setFilter((lo)-> true);
System.out.println(logger.getFilter());
logger6.log(Level.OFF,"金庸是天才");
logger6.setLevel(Level.SEVERE);
logger6.log(Level.OFF,"因为他的书很好看");
//logger6.setParent(logger);
logger6.log(Level.OFF,"我还是太差劲了");
logger.log(Level.OFF,"look");
logger.setResourceBundle(bundle);
logger.log(Level.OFF,"look");
System.out.println(logger6.getUseParentHandlers());
logger6.log(Level.OFF,"abc");
logger6.setUseParentHandlers(false);
logger6.log(Level.OFF,"def");
System.out.println(logger4);
System.out.println(logger6.getParent());
System.out.println(logger3);
System.out.println(logger2);
System.out.println(logger);
Logger logger7 = Logger.getLogger("uu");
Logger logger8 = Logger.getLogger("ii","animal");
logger7.setParent(logger8);
logger8.addHandler(new FileHandler("父级.xml"));
logger7.log(Level.OFF,"测试一下,这是子级记录器的日志");
logger7.log(Level.OFF,"look");
System.out.println(logger7.getResourceBundle());
logger8.setResourceBundle(bundle);
logger7.log(Level.OFF,"look");
System.out.println(logger7.getResourceBundle());
System.out.println(logger7.getResourceBundleName());
logger.severe("大海啊,你都是水!");
logger.severe(Supp::out);
logger.throwing("Dog","name",new Throwable("小狗妮妮"));
logger.warning("这是警告");
logger.warning(Supp::out);
}
}
class DiagnosisMessages
{
static String systemHealthStatus()
{
System.out.println("被调用了");
return new ArrayList(Arrays.asList(1,2,3)).toString();
}
}
class Supp
{
static String out()
{
return "Supplier.out";
}
}