明天讲一下java的日志级别,非log4j/slf4j日志

日志级别

Level形容
OFF不打印任何
SEVERE重大的谬误
WARNING潜在的问题正告
INFO一般的信息
CONFIG配置的信息,例如cpu信息,多少内存等
FINE一般的开发人员信息
FINER具体深刻的开发人员系信息
FINEST业余的开发人员信息
ALL最低级别全副打印

日志级别打印

static Logger logger = LogManager.getLogManager().getLogger(Logger.GLOBAL_LOGGER_NAME);    public static void main(String[] args) {//        LogManager logManager = LogManager.getLogManager();//        Logger logger = logManager.getLogger(Logger.GLOBAL_LOGGER_NAME);        logger.log(Level.INFO,"My First log");        logger.log(Level.INFO,"Another message");        testLevel();        logger.severe("oh no!");        logger.info("Just info");        logger.fine("He Developer dud");    }    public static void testLevel(){        logger.setLevel(Level.INFO);        logger.log(Level.SEVERE,"oh no!");        logger.log(Level.INFO, "Just info");        logger.log(Level.FINE,"He Developer dud");        logger.log(Level.FINEST,"Secial developer");    }三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main信息: My First log三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main信息: Another message三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest testLevel重大: oh no!三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest testLevel信息: Just info三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main重大: oh no!三月 02, 2020 11:49:09 下午 com.example.demo.pluralsight.log.LogTest main信息: Just info

logp办法打印能够自定义类名以及办法

logger.logp(Level.INFO,"com.example.demo.pluralsight.log.LogTest1","main1","logp info");三月 02, 2020 11:52:15 下午 com.example.demo.pluralsight.log.LogTest1 main1信息: logp info

自定义handler

Handler h = new ConsoleHandler();Formatter f = new SimpleFormatter();h.setFormatter(f);logger.addHandler(h);logger.setLevel(Level.INFO);logger.log(Level.INFO,"We're loging");三月 04, 2020 12:26:10 上午 com.example.demo.pluralsight.log.LogTest handlerLogger信息: We're loging三月 04, 2020 12:26:10 上午 com.example.demo.pluralsight.log.LogTest handlerLogger信息: We're loging

罕用日志输入的handler:
ConsoleHandler,写入System.err输入到执行命令行窗口中。
StreamHandler,输入到OutputStream中
SocketHandler,输入到指定主机名和端口号的套接字中。
FileHandler,能够输入到单个文件中,也可输入到滚动文件集中(依照指定的大小,文件个数等滚动输入)。

其中FileHandler的Pattern

标识符形容
/示意门路,windows下则为\,比方写为文件 ./foo.log
%t示意零碎的任何temp目录,%t/foo.log示意/var/tmp/foo.log或者C:\Users\Xuesong.bu\AppData\Local\Temp\foo.log
%h用户的home目录,%h/foo.log示意/var/users/Xueosng.bu/foo.log或者C:\Users\Xuesong.Bu\foo.log
%g循环写入的文件。foo_%g.log示意先写入foo_0.log当写满后再写入foo_1.log之后foo_2.log之后再革除foo_0.log,从新写入foo_0.log顺次循环写入

滚动输入日志

public static void fileHandlerTest() throws Exception{    FileHandler h = new FileHandler("%h/myapp_%g.log",1000,4);    h.setFormatter(new SimpleFormatter());    logger.addHandler(h);    int i= 0 ;    while(i<10000){        logger.log(Level.INFO,"===============");        i++;    }}

log的两种Formatter
XMLFormatter:格式化的XML,带有根元素,每个条目位于record的节点上面
SimpleFormatter:格式化简略文本,能够依照规范字符串的表示法进行格式化,

以下是一个规范的日志格式化输入的内容,其中5$代表Format中的message,2$示意source(class & method)

String.Format(format,date,source,logger,level,message,thrown);通过java命令java -Djava.util.logging.SimpleFormatter.format=%5$s,%2$s,%4$s%n com.example.demo.pluralsight.log.Main输入日志This is message,com.example.demo.pluralsight.log.LogTest Main,INFO

或者是间接通过批改日志默认配置文件,其中Handler能够分级,父级别子级别离输入,log.properties设置了两种handler,com.pluralsight和com.pluralsight.Main两种,一个为FileHandler另一个为ConsoleHandler,同class的包级别一样,com.plurasight是com.pluralsight.Main父级别handler

log.propertiesjava.util.logging.ConsoleHandler.level=INFOjava.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormattercom.pluralsight.handlers=java.util.logging.ConsoleHandlercom.pluralsight.level=INFOjava.util.logging.SimpleFormatter.format=%5$s,%2$s,%4$s%njava.util.logging.FileHandler.level=ALLjava.util.logging.FileHandler.pattern=./main_%g.logcom.pluralsight.Main.handlers=java.util.logging.FileHandlercom.pluralsight.Main.level=ALL

通过上面的java -D来执行Main类,并输入如下后果

public class Main {    public static void main(String[] args) {        Logger loggerParent = Logger.getLogger("com.pluralsight");        Logger logger = Logger.getLogger("com.pluralsight.Main");        logger.log(Level.INFO,"We are logging");        logger.log(Level.FINE,"We are logging fine");    }}java -Djava.util.logging.config.file=log.properties com.example.demo.pluralsight.log.Main输入后果:We are logging,com.example.demo.pluralsight.log.Main main,信息

以及生成了main_0.log其中内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE log SYSTEM "logger.dtd"><log><record>  <date>2020-03-05T16:37:44</date>  <millis>1583397464390</millis>  <sequence>0</sequence>  <logger>com.pluralsight.Main</logger>  <level>INFO</level>  <class>com.example.demo.pluralsight.log.Main</class>  <method>main</method>  <thread>1</thread>  <message>We are logging</message></record><record>  <date>2020-03-05T16:37:44</date>  <millis>1583397464400</millis>  <sequence>1</sequence>  <logger>com.pluralsight.Main</logger>  <level>FINE</level>  <class>com.example.demo.pluralsight.log.Main</class>  <method>main</method>  <thread>1</thread>  <message>We are logging fine</message></record></log>