WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fehlerausgabe im Logfile aber nicht im Command Window

 

Chillson
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 07:46     Titel: Fehlerausgabe im Logfile aber nicht im Command Window
  Antworten mit Zitat      
Hey Leute,

vielleicht kann mir ja doch jemand helfen, denn ich wiedermal nicht weiter komme.

Ich will eigentlich nur, falls welche auftreten sollten, die Fehlermeldungen in ein Logfile schreiben lassen. Mit diary on und off werden ja meine ganzen Befehle und Ausgaben ins Logfile geschrieben, wenn ich in meinen Quellcode das Simikolon weglasse. Das will ich aber nur ungern, da das Logfile dann verdammt lang wird.
Gibt es da irgendeinen "Trick" bzw. eine Möglichkeit dafür?

Vielen Dank schonmal!
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 18.10.2011, 09:28     Titel:
  Antworten mit Zitat      
DIARY selber is built-in und man kann es daher nicht modifizieren. Auch sonst kenne ich keinen guten Trick. Etwas advanced wäre mit LASTERR und timer objects zu arbeiteten. Vermutlich aber zu viel Aufstand.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.10.2011, 10:10     Titel: Re: Fehlerausgabe im Logfile aber nicht im Command Window
  Antworten mit Zitat      
Hallo Chillson,

Man kann DIARY modifizieren, obwohl es built-in ist: Wenn man ein M-File mit dem Namen "diary.m" im Matlab-Pfad hat, wird es auch aufgerufen - zumindest in modernen Matlab Versionen. In Matlab 6.5 hatten duie built-in Funktionen noch einen höhere Precedence als die M-Files.

Eine Modifikation würde aber nicht viel bringen, weil man immer noch sehr viel Aufwand betreiben müßte, um die Fehlermeldungen von den Standard-Ausgaben zu unterscheiden. Viel einfacher ist es, ERROR zu modifizieren. Dabei würde ich auf keinen Fall ein M-File mit Namen "error.m" erzeugen. Denn wenn darin ein Fehler ist, ruft es sich selbst rekursive auf, was sehr unpraktisch ist... Aber soetwas geht ganz gut:
Code:
function myError(Caller, Msg)
FID = fopen('D:\myError.log', 'a');
if FID < 0, error('Cannot open log file.'); end
fprintf(FID, '*** %s: %s\n', Caller, Msg);
fprintf(2, '*** %s: %s\n', Caller, Msg);  % Red font in CommanWindow
fclose(FID);

Nun werden die Meldungen in ein eigenes File umgeleitet. Wahlweise kann man nach der Ausgaben auch die Meldung an Matlab's ERROR weitergeben. Auch unerwartete Fehler lassen sich abfangen:
Code:
try
  ... % your code
catch ME
  myError(mfilename, ME.message);
end

Das läßt sich beliebig ausfeilen. Ich benutze eine PERSISTENT-Variable in meiner Fehler-Routine, die eine Liste mit Files enthält, in die geloggt werden soll. Wenn die Liste leer ist, wird nur ins Command-Window geschrieben. Zusätzlich gibt es noch ein Flag zur Unterscheidung von ernsten, behebbaren und unerwarteten Fehlern. Und natürlich einen Warnton.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Chillson
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2011, 08:20     Titel:
  Antworten mit Zitat      
Hey, danke Jan!

Hätte dann doch nochmal was anderes.
Es muss doch auch möglich sein, mit dem Diary Befehl, alle Ausgaben in ein Logfile zu schrieben, jedoch das nichts im Command Window angezeigt wird!?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.10.2011, 19:40     Titel:
  Antworten mit Zitat      
Hallo Chillson,

Das geht zwar, man muss dazu aber undokumentierte Java-Funktionen für das Schreiben ins Command-Window ändern. Das würde ich selbst auf keinen Fall tun! Damit verliert man nämlcih den Überblick, wenn unerwartete Fehler oder Warnungen auftreten.

Wenn man wirklich etwas in ein Log-File schreiben möchte, das nicht im Command-Window erscheint, is ein einfaches FPRINTF sicherer und direkter.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Chillson
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2011, 08:15     Titel:
  Antworten mit Zitat      
Danke Jan! Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Chillson
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2011, 11:53     Titel:
  Antworten mit Zitat      
hey jan,

sorry, aber ich habs doch nich ganz hinbekommen.

mein beispiel:

mein logfile hat den namen LOGFILFE, Wink sprich: LOGFILE= C:\logfile.txt und mit diary(LOGFILE) lass ich mir jetzt die zeilen in mein logfile schreiben, hinter denen ich das semikolon weglasse.

und wie soll das jetzt mit fprintf funktionieren?
kann ich ihm dann auch noch genau sagen, welche zeilen er in mein logfile schrieben soll?

besten dank schon mal! chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.10.2011, 12:59     Titel:
  Antworten mit Zitat      
Hallo Chillson,

Wenn Du DIARY verwendest, wird alles, was im Command-Window auftaucht auch in das DIARY-File geschrieben. Das kann nützlich oder lästig sein. Da es mir hauptsächlich lästig ist, verwende ich eine Unterfunktion, die alle Ausgaben in ein Log-File schreibt, ohne DIARY zu benutzen:
Code:
function MyDisp(Caller, Msg)
persistent FID
if nargin == 1
  switch Caller
    case 'open'
      FID = fopen('C:\LogFile.txt', 'a');
    case 'close'
      fclose(FID);
      FID = [];
    otherwise
      error('unknown command');
  end
  return;
end

if iscellstr(Msg)
  fprintf(FID, '%s: %s\n', Caller, Msg{1});
  if numel(Msg) > 1
    fprintf(FID, '    %s\n', Msg{2:end});
  end
elseif ischar(Msg)
  fprintf(FID, '%s: %s\n', Caller, Msg);
else
  error('Data type not handled.');
end

Das läßt sich natürlich noch beliebig ausfeilen, z.B. dass man die Nachricht zusätzlich noch ins Command-Window schreibt, mehrer Files öffnen kann, Mitteilungen, Warnung und Errors speziell behandelt, etc.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Chillson
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 15.09.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2011, 07:37     Titel:
  Antworten mit Zitat      
Hey Jan!

Dabne erstmal für deine Mühe! Doch ich muss zugeben, dass ich nich der absolute pro in matlab bin und daher immer noch nich ganz durchblicke... Hast du villt Zeit n paar Kommentare hinter die einzelnen Befehle/Zeilen zu schreiben damit ich weiß was das alles zu bedeuten hat?

Danke! Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2011, 09:33     Titel:
  Antworten mit Zitat      
Hallo Chillson,

Du kannst zu jedem einzelnen Befehl per "help" sehr gute Erkärungen bekommen und dabei gleichzeitig noch lernen, was man sonst noch damit erreichen kann. Das ist gerade für einen Beginner sehr lehrreich.
Ich selbst kann das nicht besser machen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.