[JAVA] Melden Sie eine CSV-Datei ab, die von Excel mithilfe von Logback gelesen werden kann

Einführung

Wir haben eine Anfrage von einem Benutzer erhalten, den Nutzungsstatus von Webanwendungen zu analysieren und zu prüfen. Ursprünglich wurde Logback für die Protokollausgabe verwendet, daher habe ich beschlossen, es durch Ausgabe einer CSV-Datei aus Logback zu unterstützen.

Was ich gemacht habe

Realisierungsmethode

Ich habe es unter Bezugnahme auf Hinzufügen eines Ausdrucks am Anfang jeder Protokolldatei mit Logback - Stapelüberlauf erstellt.

Erstellen Sie Ihren eigenen Appender

Bereiten Sie einen Anhang vor, in dem Stückliste und fester Wortlaut am Anfang der Datei stehen.

AuthFileAppender.java


public class AuthFileAppender extends RollingFileAppender {
    @Override
    public void openFile(String fileName) throws IOException {
        super.openFile(fileName);
        File activeFile = new File(getFile());
        if (activeFile.exists() && activeFile.isFile() && activeFile.length() == 0) {
            //Ausgabe Stückliste und Header nur, wenn das Ausgabeziel eine leere Datei ist
            lock.lock();
            try {
                OutputStream outputStream = super.getOutputStream();
                //Stückliste ausgeben
                outputStream.write(0xef);
                outputStream.write(0xbb);
                outputStream.write(0xbf);
                //Feste Formulierung ausgeben (CSV-Header)
                outputStream.write("Betriebsdatum,Betriebszeit,Benutzeridentifikation,Nutzername,Betriebsdetails,Operation Zielperson ID ・ ・ ・\n".getBytes());
                if (super.isImmediateFlush()) {
                    outputStream.flush();
                }
            } finally {
                lock.unlock();
            }
        }
    }
}

Erstellen einer Klasse für die Protokollausgabe

Ich wollte den Prozess des Erfassens von Anmeldebenutzerinformationen standardisieren, und ich wollte auch Logger standardisieren, also entschied ich mich, eine Klasse vorzubereiten.

AuthLogger.java


@Component
public class AuthLogger {

    /**Logger, der Überwachungsprotokolle ausgibt*/
    public static final Logger AUTH_LOGGER = LoggerFactory.getLogger(AuthLogger.class);

    /**Service für Einzelpersonen*/
    @Autowired
    protected PersonService personService;

    /**
     *Das Überwachungsprotokoll wird ohne Angabe der Zielperson ausgegeben.
     *
     * @param operation Betriebsdetails
     */
    public void log(String operation) {
        log(operation, null);
    }

    /**
     *Geben Sie die Zielperson an und geben Sie das Überwachungsprotokoll aus.
     *
     * @param operation Betriebsdetails
     * @param personId ID der Person, die damit umgegangen ist
     */
    public void log(String operation, String personId) {
        SsoLoginData ssoLoginData = SsoLoginDataUtil.getSsoLoginData(); //Holen Sie sich Login-Benutzerinformationen
        AUTH_LOGGER.trace(String.join(
            ",", //Ausgabe durch Kommas getrennt
            //Betriebsdatum und Betriebszeit sind logback.Hier nicht erforderlich, da es im Layout in XML festgelegt ist
            ssoLoginData.getPersonId(), //Benutzeridentifikation
            ssoLoginData.getUserName(), //Nutzername
            operation, //Betriebsdetails
            personId //Nutzername
            //Stellen Sie hier den Ausgabeinhalt mit personService ein
        ));
    }
}

Logback.xml Einstellungen hinzugefügt

Fügen Sie logback.xml die folgenden Einstellungen hinzu.

logback.xml


  <appender name="AUTH_APPENDER" class="your.project.web.common.util.AuthFileAppender">
    <file>/your/file/path.csv</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>/your/file/path.%d{yyyy-MM}.csv</fileNamePattern>
    </rollingPolicy>
    <encoder>
      <charset>UTF-8</charset>
      <pattern>%d{yyyy-MM-dd},%d{HH:mm:ss},%msg%n</pattern>
    </encoder>
  </appender>

  <logger name="your.project.web.common.util.AuthLogger" level="TRACE" additivity="false">
    <appender-ref ref="AUTH_APPENDER" />
  </logger>

Fügen Sie der einzelnen Implementierung eine Protokollausgabe hinzu

Dieses Mal habe ich beschlossen, den oben genannten AuthLogger im Controller von Spring MVC zu DI und die Protokollmethode direkt auszuführen. (Die Implementierung wird hier weggelassen.) Abhängig vom Umfang und den Anforderungen des Projekts gibt es meiner Meinung nach eine Option für die Ausgabe durch AOP.

Zusammenfassung und Eindrücke

Logback hatte keine Funktion, um einen festen Wortlaut (einschließlich Stückliste) am Anfang der Datei einzufügen, daher entschied ich mich, meinen eigenen Appender vorzubereiten, aber es war relativ einfach zu realisieren. Dieses Mal wurde angenommen, dass der Benutzer die Ausgabeprotokolldatei direkt in Excel überprüfen würde, daher haben wir die oben genannten Maßnahmen ergriffen. Abhängig von den Anforderungen können Sie die Protokolldatei ohne Stückliste / Kopf ausgeben und sie dann mit Stückliste / Kopf mit einem Skript kombinieren.

Recommended Posts

Melden Sie eine CSV-Datei ab, die von Excel mithilfe von Logback gelesen werden kann
Erstellen Sie eine JAR-Datei, die auf Gradle ausgeführt werden kann
Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
Lesen Sie Elemente mit Kommas in CSV-Dateien ohne Aufteilung (Java).
So erstellen Sie ein Schlüsselpaar von ecdsa in einem Format, das von Java gelesen werden kann
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Eine Bat-Datei, die Java in Windows verwendet
Grundlegende funktionale Schnittstelle, die in 3 Minuten verstanden werden kann
Praktische Tastenkombinationen für Eclipse
Liste der Geräte, die mit Swift UI in der Vorschau angezeigt werden können
Erstellen Sie ein Seitensteuerelement, das mit RecyclerView verwendet werden kann
Aktivieren Sie die Zelle A1 jeder Excel-Datei mit Java
Einführung in Rakefile, die in ca. 10 Minuten durchgeführt werden kann
Suchen Sie eine Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann
Java (Super Beginner Edition), das in 180 Sekunden verstanden werden kann