Protokollausgabe in Datei in Java

Einführung

Java-Material, das regelmäßig vorkommt. Es wurde beschlossen, bestimmte Informationen als Protokoll auszugeben, aber als Ergebnis der Überlegung, ob sie in die Datenbank oder in eine Datei ausgegeben werden sollen, habe ich beschlossen, das Protokoll in eine Datei auszugeben, also ein Memo, wenn ich es im Voraus betrachte. Die Voraussetzung ist Linux.

Vorteile der Dateiausgabe

Die Standpunkte sind völlig unterschiedlich, aber zählen Sie auf, wie Sie sich vorstellen können

Nachteile der Dateiausgabe

--Wenn die exklusive Verarbeitung nicht ordnungsgemäß ausgeführt wird, ist die Datei möglicherweise beschädigt.

Quelle

Also habe ich ein Programm erstellt, das ein einzeiliges Protokoll aus Zeit und Text in einer Datei ausgibt. Die Datei wird monatlich generiert. Es scheint einfach zu sein, die synchronisierte Methode als exklusive Steuerung zu verwenden, daher habe ich diese Methode gewählt. Natürlich ist es eine wichtige Voraussetzung, dass Sie die Protokolldatei nur mit dieser Methode betreiben.

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);

        //Protokollausgabe
        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");
        }
    }
}

Ausgabe

So was.

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
・ ・ ・ ・

Bearbeitungszeit (Referenz)

Auf einem kleinen PC wurde ein Durchsatz von 850 Fällen / Sekunde erzielt.

Nachtrag (2020/5/24)

Da FileWriter den Zeichencode nicht angeben kann, habe ich versucht, die Angabe des Zeichencodes mit OutputStreamWriter zu ermöglichen.

 //Protokollausgabemethode
    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;
                }
            }
        }

abschließend

Das nächste Mal werde ich überprüfen, ob die exklusive Kontrolle wirklich durch diese Synchronisierung erfolgt.

Recommended Posts

Protokollausgabe in Datei in Java
Beispiel zum Entpacken einer gz-Datei in Java
Informationen zur Java-Protokollausgabe
Ich habe versucht, neunundneunzig in Java auszugeben
Aktivieren Sie die Protokollausgabe sowohl für Dateien als auch für die Konsole mit log4j in Eclipse.
JavaDoc in Word-Datei ausgeben
XML-Baum in Datei ausgeben
Beispiel für eine Java-Standardprotokollausgabe
Wie kann ich IBM Mainframe-Dateien in Java eingeben / ausgeben?
So konvertieren Sie eine Datei in ein Byte-Array in Java
Lesen Sie die Java-Eigenschaftendatei in C #
Multithreaded passend zur [Java] Vorlage
Wie man JAVA in 7 Tagen lernt
Entpacken Sie die Zip-Datei in Java
Gemischte Ausgabe des westlichen Kalenders in Java
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Informationen zur Dateikopierverarbeitung in Java
Versuchen Sie, Yuma in Java zu implementieren
So verketten Sie Zeichenfolgen mit Java
Geben Sie das Datum (z. B. JJJJ-MM-TT) in die Protokolldatei ein, die per Logback ausgegeben wird
So ermitteln Sie die Länge einer Audiodatei mit Java
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Versuchen Sie, Project Euler in Java zu lösen
Einfach, Slack Bot mit Java zu machen
Java-Referenz zum Verständnis in der Abbildung
So geben Sie Jetty-Protokolle in ein beliebiges Verzeichnis aus
Spring Boot-Protokoll im JSON-Format ausgeben
Geben Sie den HTTP-Header des zu protokollierenden Google-http-Clients aus
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
So führen Sie eine Basiskonvertierung in Java durch
[Java] Wie man Dateien ausgibt und schreibt!
So geben Sie eine Java-Zeichenfolge auf dem Konsolenbildschirm aus
Ausgabedatum in Java im erweiterten ISO 8601-Format
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
Lesen Sie die xlsx-Datei in Java mit Selenium
So erhalten Sie das Datum mit Java
Ausgabe des Buches "Einführung in Java"
Fügen Sie Word-Dokumenten in Java Fußnoten hinzu
[Java] Färben Sie die Standardausgabe an das Terminal
[Java Bronze] 5 Probleme zu beachten
Von Java nach C und von C nach Java in Android Studio
Fügen Sie dem Cookie in Java das SameSite-Attribut hinzu
Ausgabe Bean als JSON im Frühjahr
[Java] Ausgabe, Variablen
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
So erstellen Sie eine Zip-Datei beim Gruppieren von Datenbanksuchergebnissen in Java
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Änderungen in Java 11
Janken in Java
So zeichnen Sie JFR (Java Flight Recorder) auf und geben eine Dump-Datei aus
Erstellung von Java-Dateien