Thomas_Hagenloc
I'm new here

Fortlaufendes Logging im ScriptContext

Hallo zusammen,

ist es möglich im Rahmen eines Scriptes ein fortlaufendes Logging zu bauen?

Szenario:

Ein Skript läuft rekursiv durch den Inhaltsbaum und prüft, ob sich eine Seite in einem Workflow befindet und setzt die Seite ggf. zurück.

Damit der Benutzer nun entsprechendes Feedback während der Laufzeit des Skripts erhält, war die Überlegung ein fortlaufendes Logging einzubauen.

Die Frage ist nun: Wie baue ich so ein Logging?

Per RequestOperation und perform werden jedes Mal neue Meldungen generiert und es entsteht eine Klickorgie. Ein einziger perform-Aufruf führt natürlich dazu, dass nur ein Fenster erscheint, jedoch logischerweise erst beim Aufruf.

String log = "";

operationAgent = context.requireSpecialist(de.espirit.firstspirit.agency.OperationAgent.TYPE);

reqOp = operationAgent.getOperation(de.espirit.firstspirit.ui.operations.RequestOperation.TYPE);

reqOp.setKind(de.espirit.firstspirit.ui.operations.RequestOperation.Kind.INFO);

reqOp.setTitle("Fertig");

killWorkflow(rootElement); // enthält z.B. log = log + child.getName() + " wurde erfolgreich entsperrt\r\n";

reqOp.perform("Fertig\r\n" + log);

Habt ihr vielleicht einen Ansatz?

Das FirstSpirit-Logging, welches über die Hilfe erreichbar ist, entspricht dem "normalen" Log, über den auch DEV-Hinweise ausgegeben werden. In diesem Fall sind die eher störend, weshalb ich eine einfache Möglichkeit suche, ein eigenes (fortlaufendes) Logging zu implementieren.

Danke und Grüße

Thomas

Labels (2)
0 Kudos
4 Replies
zava
I'm new here

Re: Fortlaufendes Logging im ScriptContext

warum nicht in medienbereich?

         

 

      StringWriter out = new StringWriter();

          .........

        String name = "today_log";

        Store mediastore = us.getStore(Store.Type.MEDIASTORE, false);

        MediaFolder folder = (MediaFolder) mediastore.getStoreElement("logs_folder", IDProvider.UidType.MEDIASTORE_FOLDER);

        Media log = (Media) mediastore.getStoreElement(name, IDProvider.UidType.MEDIASTORE_LEAF);

        if (log == null) {

            log = ((MediaFolder) folder).createMedia(name, name, Media.FILE, false);

        }

        byte[] bytes = out.toString().getBytes("UTF-8");

        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

        Long siInteger = (long) bytes.length;

        byte[] bytes = out.toString().getBytes("UTF-8");

        ByteArrayInputStream bais = new ByteArrayInputStream(bytes);

        Long si = (long) bytes.length;

        long length = si.longValue();

        log.setLock(true);

        log.getLanguageInfo(lang).setDisplayName(name);

        de.espirit.firstspirit.access.store.mediastore.File newFile = log.getFile(null);

        newFile.setFile(length, bais, "text");

        log.save();

        log.setLock(false);

        log.setLock(false);

0 Kudos
thmarx
I'm new here

Re: Fortlaufendes Logging im ScriptContext

Hallo Thomas,

Wenn es nur im das Speichern der Logs geht, könntest du dafür auch einen Datenquelle verwenden. Der Vorteil daran wäre, dass auch dann auch Filtern kannst.

Für den Benutzer könnte so einen normale Ausgabe über FS Templates oder AppCenter gebaut werden.

Gruß

Thorsten

0 Kudos
felix_reinhold
Returning Responder

Re: Fortlaufendes Logging im ScriptContext

Hi Thomas,

deiner Problembeschreibung nach geht es dir doch eher um ein asynchrones Logging während das Skript läuft, oder? (Quasi eine Art progress)

Falls ja - ich habe hierfür mal einem Dev-Projekt Marians SecondHand Log für meine Zwecke erweitert/umgebaut (Log-Konsole für den SiteArchitect ),

damit es nur Meldungen von Klassen aus definierten Packages loggt. Das könntest du auch machen (oder ein vergleichbares Logfenster bauen) und es vor Beginn des Skriptes anzeigen. Alles, was du dann im Skript loggst landet in der Konsole.

Gruß

Felix

0 Kudos
mikula
Crownpeak employee
Crownpeak employee

Re: Fortlaufendes Logging im ScriptContext

Hi Thomas,

benötigst Du noch weitere Hilfe oder haben Dir die Antworten von Thorsten und Felix bereits geholfen? In diesem Fall wäre es super, wenn Du die "richtige Antwort" entsprechend markierst, damit auch andere Community-Teilnehmer diese auf den ersten Blick finden. Solltest Du zwischenzeitlich eine eigene Lösung

gefunden haben, wäre es nett, wenn Du diese hier bereitstellst.

Viele Grüße

Martin

0 Kudos