PDA

View Full Version : Java auf iSeries



Seiten : 1 2 3 [4] 5 6

BenderD
07-01-09, 09:34
in Java verwendet man Standard mäßig log4j für sowas. Damit kann man extern konfigurieren wieviel aus welcher class wohin und wie formatiert ausgegeben wird und es gibt fertige Freeware Programme zum anzeigen und filtern der log Ausgaben. In der Applikation wird dann ein Logger erzeugt und mit unterschiedlichen Prioritten ausgegeben.
Für Arme und Kranke gibt es auch noch System.err.println() und Co.

D*B


Hallo!

So, ich habe das soweit zum Laufen bekommen. Der lokale SQL-Server Benutzer hat für die Verbindung nicht funktioniert. Warum auch immer!
Mit einem Domänen Benutzer der auch die Datenbankrechte hat und dem JTDS Treiber klappt jetzt der Verbindungsaufbau.

Da das Java Programm ja im Batch aufgerufen wird, gibt es keine Möglichkeit, das Programm zu debuggen.
Gibt es denn andere Möglichkeiten die Fehler auszugeben(System.out.println...)? Oder Log's auf der AS zu schreiben? Man könnte natürlich auch aus dem Java Programm in eine AS Datei mit einem langen String Feld schreiben. Aber geht das nicht irgend wie besser/anders?

Gruß
Henning

LindnerSpezial
07-01-09, 09:50
Danke für die schnelle Antwort!

Gibt es denn irgendwo eine Anleitung, wie man Log4j auf der iSeries installiert und benutzt? Muss man dafür auch Apache installieren?
Ist es da auch möglich bestimmte Variablen je nach Bedarf auszugeben?

Gruß Henning

BenderD
07-01-09, 10:31
http://www.johnmunsch.com/projects/Presentations/docs/Log4J/Log4J%20In%2030%20Minutes%20Or%20Less.ppt
oder einfach mal mit log4j und Tutorial googeln oder yahoochzen
Ansonsten lädt man sich das jar Archiv für log4j von Apache, sorgt dafür, dass es die Applikation im classpath hat und los gehts. Ausgabe von Variablen geht da, wie das in Java immer geht, findet man aber auch Beispiele zu in allen Tutorials.

D*B
der dazu rät doch mal über das erarbeiten von ausreichenden Grundkenntnissen nachzudenken, sonst kann das Lehrgeld in Form von vergurkten Projekten kosten!


Danke für die schnelle Antwort!

Gibt es denn irgendwo eine Anleitung, wie man Log4j auf der iSeries installiert und benutzt? Muss man dafür auch Apache installieren?
Ist es da auch möglich bestimmte Variablen je nach Bedarf auszugeben?

Gruß Henning

Fuerchau
07-01-09, 11:10
Man kann ganz einfach entsprechende Ausgaben mit system.out bzw. system.err erstellen.
Für die Ausgabe kann man beim Starten eine Ausgabeumleitung in eine PF angeben:

java .... >/qsys.lib/mylib.lib/myfile.file/myfile.mbr 2>/qsys.lib/mylib.lib/myerr.file/myerr.mbr

BenderD
07-01-09, 11:30
einfach ist nicht immer einfacher, ich würde schon zu log4j raten,
- da kann man DodUnnDeufel extern konfigurieren
- da kommen Timestamps, ThreadId und sowas automatisch
- da kann man Logdateien rollieren lassen
- da kann man Logdateien automatisch verwalten lassen
...

D*B, der einen Hauch von Handke verspürt:
"Die Angst des RPG Programmierers vor dem Framework"


Man kann ganz einfach entsprechende Ausgaben mit system.out bzw. system.err erstellen.
Für die Ausgabe kann man beim Starten eine Ausgabeumleitung in eine PF angeben:

java .... >/qsys.lib/mylib.lib/myfile.file/myfile.mbr 2>/qsys.lib/mylib.lib/myerr.file/myerr.mbr

LindnerSpezial
07-01-09, 15:04
Ich probiere gerade das Log4j einzubauen!

import org.apache.log4j.*;

private static Logger logger = Logger.getLogger( ExtDBsql.class );

SimpleLayout layout = new SimpleLayout();
ConsoleAppender consoleAppender = new ConsoleAppender( layout );
logger.addAppender( consoleAppender );
FileAppender fileAppender = new FileAppender( layout, "MeineLogDatei.log", false );
logger.addAppender( fileAppender );
// ALL | DEBUG | INFO | WARN | ERROR | FATAL | OFF:
logger.setLevel( Level.WARN );

Wie gibt man denn eine Datei im IFS an, in die die Logdaten geschrieben werden?

Es gibt zwar viel im Internet zu finden, aber meistens nur für PC's und nicht für die iSeries.

Danke im voraus

Gruß
Henning

BenderD
07-01-09, 16:28
import ist schon mal gut
das mit dem Logger sieht ebenfalls gut aus
das ganze Gedöns danach brauchst du nicht
am einfachsten eine log4j.properties im Classpath platzieren, da kann man alles einstellen, für den Anfang tuts da jedes Beispiel.
Die ifs Datei wird da bei dem entsprechenden Appender (FileAppender oder RollingFileAppender...) angegeben, relativ oder absolute Pfadnamen sind möglich.

D*B


Ich probiere gerade das Log4j einzubauen!

import org.apache.log4j.*;

private static Logger logger = Logger.getLogger( ExtDBsql.class );

SimpleLayout layout = new SimpleLayout();
ConsoleAppender consoleAppender = new ConsoleAppender( layout );
logger.addAppender( consoleAppender );
FileAppender fileAppender = new FileAppender( layout, "MeineLogDatei.log", false );
logger.addAppender( fileAppender );
// ALL | DEBUG | INFO | WARN | ERROR | FATAL | OFF:
logger.setLevel( Level.WARN );

Wie gibt man denn eine Datei im IFS an, in die die Logdaten geschrieben werden?

Es gibt zwar viel im Internet zu finden, aber meistens nur für PC's und nicht für die iSeries.

Danke im voraus

Gruß
Henning

sim
08-01-09, 06:47
zum Thema Konsolenausgabe.

Das kann auch per setzen von Umgebungsvariablen erreicht werden.

ADDENVVAR ENVVAR(QIBM_RPG_JAVA_PROPERTIES)
VALUE('-Dos400.stderr=file:/home/java/error/err.txt;-Dos400.stdout=file:/home/java/error/out.txt;')

ADDENVVAR ENVVAR(QIBM_USE_DESCRIPTOR_STDIO) VALUE('Y')

LindnerSpezial
08-01-09, 09:45
Irgendwie funktioniert das nicht so wie ich es gerne hätte!

In meiner Class steht jetzt nur noch:

import org.apache.log4j.*;

private static Logger logger = Logger.getLogger( ExtDB.class );

logger.setLevel( Level.ALL );
logger.debug("Testnachricht!.");


Meine log4j.properties sieht so aus:

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder
log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppen der
# log4j.appender.R.File=log4j.log
log4j.appender.R.File=//SYSTEMNAME/Home/BENUTZER/log4j.log
log4j.appender.R.MaxFileSize=1000KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLa yout
log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

Die log4j.properties steht im gleichen Verzeichnis wie die Class der Application.

Die log4j.log müsste doch eigentlich automatisch erstellt werden, oder muss eine vorhanden sein?

Gruß
Henning

BenderD
08-01-09, 11:06
- die Verzeichnisnamen sind case sensitive und lass mal den Systemnamen weg.

log4j.appender.R.File=/home/BENUTZER/log4j.log

- den setLevel brauchst du ebenfalls nicht
- und schau mal in den System.out Ausgaben nach, da findet sich wahrscheinlich ein Hinweis auf den Pfad


Irgendwie funktioniert das nicht so wie ich es gerne hätte!

In meiner Class steht jetzt nur noch:

import org.apache.log4j.*;

private static Logger logger = Logger.getLogger( ExtDB.class );

logger.setLevel( Level.ALL );
logger.debug("Testnachricht!.");


Meine log4j.properties sieht so aus:

log4j.rootLogger=debug, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder
log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppen der
# log4j.appender.R.File=log4j.log
log4j.appender.R.File=//SYSTEMNAME/Home/BENUTZER/log4j.log
log4j.appender.R.MaxFileSize=1000KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLa yout
log4j.appender.R.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m%n

Die log4j.properties steht im gleichen Verzeichnis wie die Class der Application.

Die log4j.log müsste doch eigentlich automatisch erstellt werden, oder muss eine vorhanden sein?

Gruß
Henning