Ich habe folgendes:
public class doCheck(){
public void performCheck(){
try {
perform all checks......
}
catch(Exception e){
logger.error("Exception occured in class doCheck in method performCheck");
thrown new MyNewException(e.getMessage());
}
}
}
Ist es sicher, den Klassen- und Methodennamen zu protokollieren?
quelle
@Konrad beantwortete die direkte Frage, jedoch hat Ihre Ausnahmebehandlung ein kleines und zwei schwerwiegende Probleme. Da Sie ursprünglich auf codereview.SE gepostet haben, sind sie hier:
OK, ich werde ein viertes Problem hinzufügen: Sie protokollieren, wo die Ausnahme aufgetreten ist, aber Sie sagen nicht, was Sie getan haben, als es passiert ist, oder geben kontextbezogene Informationen an. Wenn Sie die tatsächliche Ausnahme protokollieren (Punkt 1), wissen Sie, wo sie aufgetreten ist. Wichtiger ist es, etwas wie "Datei foo.txt kann nicht geöffnet werden" zu sagen.
quelle
Es ist nicht besonders unsicher. Wenn Sie also nichts Kritisches in dieser Klasse verbergen möchten oder wenn die Klasse Teil eines kritischen Pfads ist (wie ein sicherer Handshake oder eine "versteckte" Funktion), würde ich dies nicht als Problem betrachten überhaupt.
Außerdem sprechen wir hier über Java. Wenn es sich also um eine clientseitige App handelt, auf der Java auf dem Client ausgeführt wird, können sie ihre JRE jederzeit so ändern, dass sie ihre eigenen Debugging-Routinen hinzufügen und / oder einen benutzerdefinierten Klassenladeprogramm verwenden und so ziemlich auf Ihre Klassen zugreifen, wie sie möchten. Es ist immer möglich, es ihnen schwerer zu machen (indem man Dinge tiefer versteckt oder sogar Code verschleiert), aber es ist normalerweise nicht kosteneffektiv, wenn man die Zeit und den Aufwand berücksichtigt, die erforderlich sind, um dies gegen den durch statistisch unwahrscheinliche Verlust verursachten Verlust zu erreichen böswillige Benutzer.
Wenn es sich um eine serverseitige Software handelt, die möglicherweise Protokolle an Clients (z. B. an den Browser des Benutzers) ausgibt, ist dies wahrscheinlich keine allzu große Sache, aber es ist bereits einfacher zu beheben: Konfigurieren Sie Ihren Container Verwenden Sie ein Protokollierungsframework oder einen Multiplexer, um stattdessen zu Debugging-Zwecken in die entsprechenden Dateien auf dem Server auszugeben. Auf diese Weise behalten Sie nützliche Datensätze für das Debuggen bei, ohne jedoch potenziell nützliche Informationen zu gefährden.
Aber im Allgemeinen wäre dies wahrscheinlich kein Problem. Es ist eher das, was Sie in die Debug-Nachricht einfügen, was ein Problem sein könnte, da wir als Entwickler häufig dazu neigen, Dinge auszugeben, an denen wir arbeiten (Sie möchten diese Debug-Ausgaben für Benutzernamen, Kennwörter, Salze und Sicherheitstoken nicht im Blick behalten ).
quelle