美文网首页小卜java
JAVA log日志系统

JAVA log日志系统

作者: 汤太咸啊 | 来源:发表于2021-11-13 21:32 被阅读0次

    今天讲一下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.properties
    java.util.logging.ConsoleHandler.level=INFO
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
    com.pluralsight.handlers=java.util.logging.ConsoleHandler
    com.pluralsight.level=INFO
    java.util.logging.SimpleFormatter.format=%5$s,%2$s,%4$s%n
    java.util.logging.FileHandler.level=ALL
    java.util.logging.FileHandler.pattern=./main_%g.log
    com.pluralsight.Main.handlers=java.util.logging.FileHandler
    com.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>
    
    

    相关文章

      网友评论

        本文标题:JAVA log日志系统

        本文链接:https://www.haomeiwen.com/subject/euwzzltx.html