Enregistrer la sortie dans un fichier en Java

introduction

Matériel Java qui se produit régulièrement. Il a été décidé de sortir certaines informations sous forme de journal, mais après avoir envisagé de le sortir dans la base de données ou dans un fichier, j'ai décidé de sortir le journal dans un fichier, donc un mémo lors de l'examen préalable. La prémisse est Linux.

Avantages de la sortie de fichier

Les points de vue sont complètement différents, mais énumérer comme vous pouvez l'imaginer

Inconvénients de la sortie de fichier

La source

J'ai donc créé un programme qui génère un journal d'une ligne composé de temps et de texte dans un fichier. Le fichier est généré mensuellement. Il semble facile d'utiliser la méthode synchronisée comme contrôle exclusif, j'ai donc choisi cette méthode. Bien sûr, il est important de ne pas utiliser le fichier journal autrement que par cette méthode.

LogWriter.java


import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Calendar;
import java.io.*;
public class LogWriterNew{

    public static SimpleDateFormat sdf = new SimpleDateFormat("YYYY/MM/dd HH:mm:ss");

    public static synchronized void writeLog(String text){
        Calendar calendar = Calendar.getInstance();

        String OUTPUT_DIR= "out";

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        Date date = calendar.getTime();

        String yearStr = String.format("%04d", year);
        String monthStr = String.format("%02d", month);

        //Sortie de journal
        String file_name = OUTPUT_DIR + File.separator + yearStr + "_" + monthStr + ".log";
        File file = new File(file_name);
        FileWriter fw = null;
        String line = sdf.format(date) + "," +  text;
        try{
            fw = new FileWriter(file, true);
            fw.write(line + "\n");
        }catch(IOException e){
            e.printStackTrace();
        }finally {
            if(fw != null) {
                try {
                    fw.close();
                }catch(Exception e2) {
                    e2.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] argv){

        for(int i=0; i<1000;i++){
            System.out.println(i);
            writeLog(i + "aaa");
        }
    }
}

production

Comme ça.

2020/05/23 08:25:02,0aaa
2020/05/23 08:25:02,1aaa
2020/05/23 08:25:02,2aaa
2020/05/23 08:25:02,3aaa
2020/05/23 08:25:02,4aaa
2020/05/23 08:25:02,5aaa
2020/05/23 08:25:02,6aaa
2020/05/23 08:25:02,7aaa
2020/05/23 08:25:02,8aaa
2020/05/23 08:25:02,9aaa
2020/05/23 08:25:02,10aaa
・ ・ ・ ・

Temps de traitement (référence)

Sur un PC de petite taille, un débit de `` 850 caisses / s '' a été obtenu.

Post-scriptum (2020/5/24)

Comme FileWriter ne peut pas spécifier le code de caractère, j'ai essayé de rendre possible la spécification du code de caractère à l'aide de OutputStreamWriter.

 //Méthode de sortie du journal
    public static synchronized boolean writeLog(String fileName, String date, String[] items){

        for(int i=0; i<items.length; i++){
            items[i] = escape(items[i]);
        }
        String line = date + "," + String.join(",", items);

        File file = new File(fileName);
        PrintWriter pw   = null;
        try {
            pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), "Windows-31j")));
            pw.println(line);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (pw != null) {
                try {
                    pw.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                    return false;
                }
            }
        }

en conclusion

La prochaine fois, je vérifierai si le contrôle exclusif est réellement effectué par ce synchronisé.

Recommended Posts

Enregistrer la sortie dans un fichier en Java
Exemple pour décompresser le fichier gz en Java
À propos de la sortie du journal Java
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
Activez la sortie du journal vers les fichiers et la console à l'aide de log4j dans Eclipse.
Sortie javaDoc dans un fichier Word
Sortie de l'arborescence XML dans un fichier
Exemple de sortie de journal standard Java
Comment entrer / sortir des fichiers mainframe IBM en Java?
Comment convertir un fichier en tableau d'octets en Java
Lire le fichier de propriétés Java en C #
Multithread pour s'adapter au modèle [Java]
Comment apprendre JAVA en 7 jours
Décompressez le fichier zip en Java
Sortie mixte du calendrier occidental en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Comment utiliser les classes en Java?
Comment nommer des variables en Java
A propos du traitement de la copie de fichiers en Java
Essayez d'implémenter Yuma en Java
Comment concaténer des chaînes avec Java
Mettez la date (par exemple aaaa-MM-jj) dans la sortie du fichier journal par logback
Comment obtenir la longueur d'un fichier audio avec Java
Comment implémenter le calcul de la date en Java
Comment implémenter le filtre de Kalman par Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Essayez de résoudre Project Euler en Java
Facile à créer Slack Bot avec Java
Référence Java à comprendre dans la figure
Comment générer des journaux Jetty dans n'importe quel répertoire
Sortie du journal Spring Boot au format json
Sortie de l'en-tête HTTP de google-http-client à journaliser
Comment ajouter un fichier jar dans ScalaIDE
Comment faire une conversion de base en Java
[Java] Comment sortir et écrire des fichiers!
Comment sortir une chaîne Java sur l'écran de la console
Date de sortie en Java au format étendu ISO 8601
Convertir des fichiers SVG en fichiers PNG en Java
Comment appliquer les conventions de codage en Java
Comment intégrer Janus Graph dans Java
Lire le fichier xlsx en Java avec Selenium
Comment obtenir la date avec Java
Sortie du livre "Introduction à Java"
Ajouter des notes de bas de page aux documents Word en Java
[Java] Colorez la sortie standard vers le terminal
[Java Bronze] 5 problèmes à garder à l'esprit
De Java à C et de C à Java dans Android Studio
Ajouter l'attribut SameSite au cookie en Java
Bean de sortie au format JSON au printemps
[Java] sortie, variables
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Pour créer un fichier Zip lors du regroupement des résultats de recherche de base de données en Java
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Changements dans Java 11
Janken à Java
Comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage
création de fichier java