var Book = {"Titles":[
{
"Book3" : "BULLETIN 3"
}
,
{
"Book1" : "BULLETIN 1"
}
,
{
"Book2" : "BULLETIN 2"
}
]}
var findbystr = function(str) {
var return_val;
Book.Titles.forEach(function(data){
if(typeof data[str] != 'undefined')
{
return_val = data[str];
}
}, str)
return return_val;
}
book = findbystr('Book1');
console.log(book);
// I set up a ConsoleAppender in Log4J to format Stdout/Stderr
log4j.rootLogger=DEBUG, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%t] %-5p %c - %m%n
// And I call this StdOutErrLog.tieSystemOutAndErrToLog() on startup
public class StdOutErrLog {
private static final Logger logger = Logger.getLogger(StdOutErrLog.class);
public static void tieSystemOutAndErrToLog() {
System.setOut(createLoggingProxy(System.out));
System.setErr(createLoggingProxy(System.err));
}
public static PrintStream createLoggingProxy(final PrintStream realPrintStream) {
return new PrintStream(realPrintStream) {
public void print(final String string) {
realPrintStream.print(string);
logger.info(string);
}
};
}
}
Если вы используете сервер приложений, контейнер сервлетов или что-то подобное, см. Ответ кгианнакакиса .
Для автономных приложений см. this . Вы можете переназначить stdin , stdout и stderr , используя класс java.lang.System . По сути, вы создаете новый подкласс PrintStream и устанавливаете для этого экземпляра значение System.out.
Что-то вроде этих строк в начале вашего приложения (непроверено).
// PrintStream object that prints stuff to log4j logger
public class Log4jStream extends PrintStream {
public void write(byte buf[], int off, int len) {
try {
// write stuff to Log4J logger
} catch (Exception e) {
}
}
}
// reassign standard output to go to log4j
System.setOut(new Log4jStream());
Полагаю, вы регистрируете трассировки стека через e.printStackTrace ()
? Вы можете передать объект исключения в методы ведения журнала Log4j, и они появятся в вашем журнале (см. Logger.error (Object obj, Throwable t) )
Обратите внимание, что вы можете изменить System.out и System .err к другому PrintStream , который перенаправляет на Log4j. Это было бы несложным изменением и избавило бы вас от преобразования всех ваших операторов System.out.println ()
.
Стандартный вывод и потоки ошибок управляются из вашего контейнера. Например, Tomcat использует JULI для протоколирования потоков вывода и ошибок.
Я рекомендую оставить их как есть. Избегайте использования System.out.print в вашем приложении. См. здесь для трассировки стека.