Processus complet d'utilisation du code au niveau du projet de l'enregistreur intégré Java

Auparavant, pour d'autres raisons, le développement Java n'était pas effectué depuis longtemps. Récemment, un backend d'applet mobile Html5 sera construit en Java.

Comme il s'agit d'un petit programme, il est utilisé sur le terminal mobile, et le traitement des demandes des clients consiste à renvoyer json. Naturellement, il n'est pas nécessaire d'utiliser le cadre noble, gourmand en mémoire, compliqué et à développement lent de SSH .

En même temps, je veux aussi revenir à l'original et écrire du code simple pour construire un prototype d'un framework reposant.

À l'origine, je voulais utiliser log4j pour créer un système de journalisation, télécharger la dernière version et voir que le package de citation atteignait plus de 1M. J'étais ennuyé. N'est-ce pas juste un journal? Est-ce nécessaire? ! Mon projet entier n'a pas un billion de mon propre code dans un package jar!

J'ai de nouveau regardé la journalisation commune, et soit cela n'a rien fait, soit il a fallu monter d'autres paquets.

En référence aux informations sur Internet, j'ai décidé de créer moi-même un JDK Log.

Le code suivant a été ajusté, vous êtes les bienvenus! (Si vous avez des vues similaires)

1. Créez un nouveau SysLog.java et tapez le code suivant. Pour getLogger

2, créez un nouveau SysLogFormatter.java pour formater l'entrée. Je pense que vous ne serez pas satisfait de la sortie du journal par défaut de jdk. C'est ce que j'ai découvert grâce à SimpleFormatter.

3. Créez un nouveau logger.properties et placez-le sous le répertoire src ou WEB-INF. Utilisé pour formater la sortie et la sortie dans un fichier


SysLog.java

import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

public class SysLog {
	private static SysLog log = null;

	public static SysLog instance() {
		if (log == null) {
			//synchronized SysLog.class
			log = new SysLog();
		}
		return log;
	}

	public SysLog() {
		InputStream is = null;
        try {
        	LogManager.getLogManager().readConfiguration(SysLog.class.getClass().getResourceAsStream("/logger.properties"));
            
        } catch (Exception e) {
            System.err.println("input properties file is error.\n" + e.toString());
            e.printStackTrace();
            
        } finally {
        	if( is != null ) {
        		try {
        			is.close();	
				} catch (Exception e2) {
					e2.printStackTrace();
				}        		
        	}
        }
	}

	public Logger get_loger(Class<?> clazz) {
		return get_loger(clazz.getName());
	}

	public Logger get_loger(String clazz) {
		// LogManager.getLogManager().getLogger(name)
		return Logger.getLogger(clazz);

	}

	public static Logger getLoger(Class<?> clazz) {
		return instance().get_loger(clazz);
	}

	public static Logger getLoger(String clazz) {
		
		return instance().get_loger(clazz);
	}

}



SysLogFormater.java


package sx.cms.util;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;

/**
 * this code was from copy from java.util.logging.SimpleFormatter
 */
public class SysLogFormatter extends Formatter {
    //private static final String format = "%1$tb %1$td, %1$tY %1$tl:%1$tM:%1$tS %1$Tp %2$s%n%4$s: %5$s%6$s%n";
	//private static final String format = "%1$tY/%1$tb/%1$td/%1$Tp/%1$tl:%1$tM:%1$tS %2$s[%4$s]\t%5$s%6$s%n";
	private static final String format = "%1$tY/%1$tm/%1$td/%1$tH:%1$tM:%1$tS %2$s[%4$s]\t%5$s%6$s%n";
	
    private final Date dat = new Date();

    public synchronized String format(LogRecord record) {
        dat.setTime(record.getMillis());        String source;
        if (record.getSourceClassName() != null) {
            source = record.getSourceClassName();
            if (record.getSourceMethodName() != null) {
               source += " " + record.getSourceMethodName();
            }
        } else {
            source = record.getLoggerName();
        }
        String message = formatMessage(record);
        String throwable = "";
        if (record.getThrown() != null) {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            pw.println();
            record.getThrown().printStackTrace(pw);
            pw.close();
            throwable = sw.toString();
        }
        return String.format(format,
                             dat,
                             source,
                             record.getLoggerName(),
                             //record.getLevel().getLocalizedLevelName(),
                             record.getLevel().getName(),
                             message,
                             throwable);
    }

}



logger.properties



handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler
java.util.logging.ConsoleHandler.formatter = project.your.SysLogFormatter
java.util.logging.ConsoleHandler.level = CONFIG

# Level.INFO
 
#log out file
java.util.logging.FileHandler.pattern = my.log%g.log  
java.util.logging.FileHandler.formatter = sx.cms.util.SysLogFormatter
java.util.logging.FileHandler.limit = 104857600
java.util.logging.FileHandler.count = 3
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.level = INFO
 
LOGGER.level = WARNING



Test et utilisation


	//测试和使用
	public static void main(String[] args) {
		Logger log = SysLog.getLoger(Main.class);
		log.info("log 中国" + System.currentTimeMillis());
	}





Je suppose que tu aimes

Origine blog.csdn.net/RoadToTheExpert/article/details/70854563
conseillé
Classement