java 记录考勤记录_Java中的记录器– Java记录示例

java 记录考勤记录

Today we will look into Logger in Java. Java Logger provides logging in java programming.

今天,我们将研究Java中的Logger。 Java Logger提供Java编程中的日志记录。

Java中的记录器 (Logger in Java)

Java Logging API was introduced in 1.4 and you can use java logging API to log application messages. In this java logging tutorial, we will learn basic features of Java Logger. We will also look into Java Logger example of different logging levels, Logging Handlers, Formatters, Filters, Log Manager and logging configurations.

Java日志记录 API在1.4中引入,您可以使用Java日志记录API来记录应用程序消息。 在此Java日志记录教程中,我们将学习Java Logger的基本功能。 我们还将研究不同日志级别,日志处理程序,格式化程序,过滤器,日志管理器和日志配置的Java Logger示例。

Java记录器 (Java Logger)

java.util.logging.Logger is the class used to log application messages in java logging API.

java.util.logging.Logger是用于在Java日志记录API中记录应用程序消息的类。

We can create java Logger with very simple one line code as;

我们可以用非常简单的一行代码创建Java Logger:

Logger logger = Logger.getLogger(MyClass.class.getName());

Java记录级别 (Java Logging Levels)

java.util.logging.Level defines the different levels of java logging. There are seven levels of logging in java.

java.util.logging.Level定义了Java日志记录的不同级别。 Java有七个登录级别。

  1. SEVERE (highest)

    严重(最高)
  2. WARNING

    警告
  3. INFO

    信息
  4. CONFIG

    配置
  5. FINE

    精细
  6. FINER

    罚款
  7. FINEST

    最好的

There are two other logging levels, OFF that will turn off all logging and ALL that will log all the messages.

还有其他两个日志记录级别,“ 关闭”将关闭所有日志记录,“ 所有”将记录所有消息。

We can set the logger level using following code:

我们可以使用以下代码设置记录器级别:

logger.setLevel(Level.FINE);

The logs will be generated for all the levels equal to or greater than the logger level. For example if logger level is set to INFO, logs will be generated for INFO, WARNING and SEVERE logging messages.

将为等于或大于记录器级别的所有级别生成日志。 例如,如果记录器级别设置为INFO,则将为INFO,WARNING和SEVERE记录消息生成日志。

Java记录处理程序 (Java Logging Handlers)

We can add multiple handlers to a java logger and whenever we log any message, every handler will process it accordingly. There are two default handlers provided by Java Logging API.

我们可以向Java记录器添加多个处理程序,并且每当记录任何消息时,每个处理程序都会对其进行相应处理。 Java Logging API提供了两个默认处理程序。

  1. ConsoleHandler: This handler writes all the logging messages to console

    ConsoleHandler :此处理程序将所有日志消息写入控制台
  2. FileHandler: This handler writes all the logging messages to file in the XML format.

    FileHandler :此处理程序将所有日志记录消息以XML格式写入文件。

We can create our own custom handlers also to perform specific tasks. To create our own Handler class, we need to extend java.util.logging.Handler class or any of it’s subclasses like StreamHandler, SocketHandler etc.

我们还可以创建自己的自定义处理程序来执行特定任务。 要创建自己的Handler类,我们需要扩展java.util.logging.Handler类或它的任何子类,例如StreamHandler,SocketHandler等。

Here is an example of a custom java logging handler:

这是一个自定义Java日志处理程序的示例:

package com.journaldev.log;

import java.util.logging.LogRecord;
import java.util.logging.StreamHandler;

public class MyHandler extends StreamHandler {

    @Override
    public void publish(LogRecord record) {
        //add own logic to publish
        super.publish(record);
    }


    @Override
    public void flush() {
        super.flush();
    }


    @Override
    public void close() throws SecurityException {
        super.close();
    }

}

Java记录格式化程序 (Java Logging Formatters)

Formatters are used to format the log messages. There are two available formatters in java logging API.

格式化程序用于格式化日志消息。 java记录API中有两个可用的格式化程序。

  1. SimpleFormatter: This formatter generates text messages with basic information. ConsoleHandler uses this formatter class to print log messages to console.

    SimpleFormatter :此格式化程序生成带有基本信息的文本消息。 ConsoleHandler使用此格式化程序类将日志消息打印到控制台。
  2. XMLFormatter: This formatter generates XML message for the log, FileHandler uses XMLFormatter as a default formatter.

    XMLFormatter :此格式化程序为日志生成XML消息,FileHandler使用XMLFormatter作为默认格式化程序。

We can create our own custom Formatter class by extending java.util.logging.Formatter class and attach it to any of the handlers. Here is an example of a simple custom formatter class.

我们可以通过扩展java.util.logging.Formatter类来创建自己的自定义Formatter类,并将其附加到任何处理程序上。 这是一个简单的自定义格式化程序类的示例。

package com.journaldev.log;

import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

public class MyFormatter extends Formatter {

    @Override
    public String format(LogRecord record) {
        return record.getThreadID()+"::"+record.getSourceClassName()+"::"
                +record.getSourceMethodName()+"::"
                +new Date(record.getMillis())+"::"
                +record.getMessage()+"\n";
    }

}

Java中的记录器– Java日志管理器 (Logger in Java – Java Log Manager)

java.util.logging.LogManager is the class that reads the logging configuration, create and maintains the logger instances. We can use this class to set our own application specific configuration.

java.util.logging.LogManager是读取日志配置,创建和维护记录器实例的类。 我们可以使用此类来设置我们自己的应用程序特定的配置。

LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));

Here is an example of Java Logging API Configuration file. If we don’t specify any configuration, it’s read from JRE Home lib/logging.properties file.

这是Java Logging API配置文件的示例。 如果不指定任何配置,则从JRE Home lib/logging.properties文件中读取。

mylogging.properties

mylogging.properties

handlers= java.util.logging.ConsoleHandler

.level= FINE

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

com.journaldev.files = SEVERE

Here is a simple java program showing usage of Logger in Java.

这是一个简单的Java程序,显示了Java中Logger的用法。

package com.journaldev.log;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class LoggingExample {

    static Logger logger = Logger.getLogger(LoggingExample.class.getName());
    
    public static void main(String[] args) {
        try {
            LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));
        } catch (SecurityException | IOException e1) {
            e1.printStackTrace();
        }
        logger.setLevel(Level.FINE);
        logger.addHandler(new ConsoleHandler());
        //adding custom handler
        logger.addHandler(new MyHandler());
        try {
            //FileHandler file name with max size and number of log files limit
            Handler fileHandler = new FileHandler("/Users/pankaj/tmp/logger.log", 2000, 5);
            fileHandler.setFormatter(new MyFormatter());
            //setting custom filter for FileHandler
            fileHandler.setFilter(new MyFilter());
            logger.addHandler(fileHandler);
            
            for(int i=0; i<1000; i++){
                //logging messages
                logger.log(Level.INFO, "Msg"+i);
            }
            logger.log(Level.CONFIG, "Config data");
        } catch (SecurityException | IOException e) {
            e.printStackTrace();
        }
    }

}

When you will run above java logger example program, you will notice that CONFIG log is not getting printed in file, that is because of MyFilter class.

当您在Java logger示例程序上方运行时,您会注意到CONFIG日志未在文件中打印出来,这是由于MyFilter类所致。

package com.journaldev.log;

import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;

public class MyFilter implements Filter {

	@Override
	public boolean isLoggable(LogRecord log) {
		//don't log CONFIG logs in file
		if(log.getLevel() == Level.CONFIG) return false;
		return true;
	}

}

Also the output format will be same as defined by MyFormatter class.

同样,输出格式将与MyFormatter类定义的格式相同。

1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg977
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg978
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg979
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg980

If we don’t add our own Formatter class to FileHandler, the log message will be printed like this.

如果我们不将自己的Formatter类添加到FileHandler,则日志消息将像这样打印。

<record>
  <date>2012-12-14T17:03:13</date>
  <millis>1355533393319</millis>
  <sequence>996</sequence>
  <logger>com.journaldev.log.LoggingExample</logger>
  <level>INFO</level>
  <class>com.journaldev.log.LoggingExample</class>
  <method>main</method>
  <thread>1</thread>
  <message>Msg996</message>
</record>

Console log messages will be of following format:

控制台日志消息将采用以下格式:

Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg997
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998

Below image shows the final Java Logger example project.

logger in java, java logging example

下图显示了最终的Java Logger示例项目。

That’s all for Logger in Java and Java Logger Example. You can download the project from below link.

Java和Java Logger示例中的Logger就这些了。 您可以从下面的链接下载项目。

Reference: Java Logging API

参考: Java Logging API

翻译自: https://www.journaldev.com/977/logger-in-java-logging-example

java 记录考勤记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值