Override System.out.println()

Guys,
I know that "System" is a final class and I can't override it.
But "PrintStream" is not a final class and it contains "println(Object)"
method in it. So, I can override it, right?
My basic requirement is, when I have a program with
System.out.println("sreedhar");
say, it should display me something like
Oct 11, 2007 4:05:05 PM INFO: sreedhar.
ie. I want to override S.o.p to Logger.info (where Logger is from log4j; or for that matter from commons-logging or JDK logging).
Can this be done by changing System.java, dropping System.class in tools.jar?

System has this method. With its help, you can use your own (prepending, timestamping etc.) PrintStream object:
public static void setOut(PrintStream out)
//    Reassigns the "standard" output stream.Kaj was faster.
Edited by: BIJ001 on Oct 12, 2007 8:43 AM

Similar Messages

  • Is it possible to overide System.out.println()....

    Hi all,
    I have a program which uses System.out.println() a lot. As the whole program needed to be in GUI form, I have to abbandon the console window and print all my outputs to a special text pane which I have already created and tested.
    My problem is, is there a way for me to keep my System.out.println() statements as they are and print the outputs to my text pane instead of printing it to the console?
    Can I use some kind of overriding of System.out.println()? If so can anybody tell me how to do it?
    Thank you all in advance

    Hi again guys,
    I managed to get the system.out working. Thanks again. But I was trying to do the same to system.in using a class that inherits from InputStream and failed, can you help me out again pliz.
    following is a simplified version of the code. problem I have is that the input I get on readButton click(see the code) is always -1. The code doesn't wait for user input . How can I correct this. please help Thanx
    public class Main() implements ActionListener
        JTextPane textPane;
        JButton readButton;
        public Main()
                this.initGUI();
                Console myConsole = new Console(this.textPane);
                System.setIn(new myInputStream(myConsole));
        private void initGUI()
               this.textPane = new JTextPane();
               this.readButton = new readButton();
               this.readButton.AddActionListener(this);
                //code to create the GUI and show the textPane
               //follows
         public void ActionPerformed(ActionEvent e)
                 try
                             int keyCode = System.in.read();
                     }Catch(Exception e)
                 System.out.println("Pressed Key Code is " + keyCode);          
         public static void main(String[] args)
                   new Main();
    public class Console extends KeyListener
         JTextPane textPane;
         int pressedKey = -1;
         public console(JTextPane textPane)
                 this.textPane = textPane;
                 this.textPane.addKeyListener(this);
        public void keypressed(KeyEvent e)
                this.pressedKey = e.getKeyCode();
       public int read()
               return this.pressedKey;
    public class myInputStream extends InputStream
                Console console;
                public myInputStream(Console console)
                       this.console = console;
                public int read()
                       return this.console.read();
    }

  • Changing System.out.println()

    Imagine having hundreds of java classes. In these classes there are many System.out.println(data) in different places. When printing in the console screen I cannot know which java class is printing. Of course I could open every java-file and in every System.out.println() write as:
    System.out.println("This is TheNameOfJavaClass" + myData)
    or
    System.out.println(this.getClass().getName() + " - " + myData)...but I want a nice approach like extending or implenting some how in classes and the java classes add java-class-name when using System.out.println(myData) it becomes className + myData
    Do you have any suggestion? Is there clever approach to this?
    Edited by: Maria1990 on Aug 12, 2010 12:32 PM

    You may have missed the first reply, so here just an example:
    import java.io.PrintStream;
    public class PrefixPrintln {
        private static class Prefixer extends PrintStream {
         public Prefixer(PrintStream ps) {
             super(ps);
         @Override
         public void println(String txt) {
             super.println(findCaller() + ": " + txt);
         // I'm not sure if other print methods will invoke println(String),
         // so you may have to overwrite other print methods as well.
         private String findCaller() {
             StackTraceElement[] elms = Thread.currentThread().getStackTrace();
             for (StackTraceElement elm : elms) {
              String name = elm.getClassName();
              if (!name.equals(this.getClass().getName())
                   && !name.equals(Thread.class.getName())) {
                  return name;
             return null;
        public static void main(String[] args) {
         System.setOut(new Prefixer(System.out));
         new PrefixPrintln().useSystemOut();
        private void useSystemOut() {
         System.out.println("Some message");
    }

  • Urgent: Redirecting System.out.println to more than one place

    Hi All,
    I want to divert all my System.out.println() statements to a Log file as well as on to the screen.
    But only one of the 2 options actually works.
    So if anyone can suggest me some ways I will appreciate very much.
    My code looks something like this:-
    if (m_filename != null) {
    try {
    FileOutputStream fos = new FileOutputStream(m_filename);
    PrintStream ps = new PrintStream(fos);
    System.setOut(ps);
    System.setErr(ps);
    //This code Added for Printing Onto Screen But it does not work
    Stream ps1 = new PrintStream(System.out);
    System.setOut(ps1);
    System.setErr(ps1);
    } catch (IOException ioe) {
    System.out.println("Could not create log file " + m_filename + " because " + ioe);
    As far as logging onto file is menat it works when i set it but printing onto screen does not.
    How can i achive it
    Thanks
    Raj

    Hi,
    You are right but in my current scenario i cannot incorporate this log4j because my application is using some other framework and I am just trying to override this frameworks loggig behaviour so that it logs to both a log file as well as on to the screen.
    Here is the code that this framework uses for logging and i am simply overriding it to do the reqd thing but its not working for me:-
    * Resets the System's out and err OutputStreams to the Launcher's
    * own ThreadedOutputStream, so that output from different threads
    * can be tracked efficiently.
    protected void setOutputStreams() {
         if (scInfo.size() <= 1) {
    // don't need Threaded handling with one thread
    if (m_filename != null) {
    try {
    FileOutputStream fos = new FileOutputStream(m_filename);
    PrintStream ps = new PrintStream(fos);
    System.setOut(ps);
    System.setErr(ps);
    //Added for Printing Onto Screen
                             PrintStream ps1 = new PrintStream(System.out);
    System.setOut(ps1);
    System.setErr(ps1);
    } catch (IOException ioe) {
    Debug.fatalError("Launcher.setOutputStreams","Could not create log file " + m_filename + " because " + ioe);
    else {
    Debug.information("Launcher.setOutputStreams","Initializing ThreadedPrintStream");
    if (m_filename == null) {
    System.setOut(new ThreadedPrintStream(System.out));
    System.setErr(new ThreadedPrintStream(System.err));
    else {
    PrintStream out = new ThreadedPrintStream(m_filename);
    System.setOut(out);
    System.setErr(out);
    //Added for Printing Onto Screen
    System.setOut(new ThreadedPrintStream(System.out));
    System.setErr(new ThreadedPrintStream(System.err));
    Debug.information("Launcher.setOutputStreams","ThreadedPrintStream initialized.");
    Thanks
    Raj

  • System.out.println() Print to JFrame

    I just wrote a rather large java application and now want to develop a GUI for it. I have never developed GUI and am trying to use the API's for help. Can anyone point me in the right direction: I am trying to take everything that is printed out with System.out.println() and print it inside a JFrame. Any help would be magnificent.
    -Alex

    Add a JTextArea to your frame, create a TextAreaOutputStream with it, and use System.setOut(...) to set System.ouot
    * Created on Mar 13, 2005 by @author Tom Jacobs
    package tjacobs;
    import java.io.IOException;
    import java.io.OutputStream;
    import javax.swing.JTextArea;
    import javax.swing.text.JTextComponent;
    * TextAreaOutputStream creates an outputstream that will output to the
    * given textarea. Useful in setting System.out
    public class TextAreaOutputStream extends OutputStream {
         public static final int DEFAULT_BUFFER_SIZE = 1;
         JTextArea mText;
         byte mBuf[];
         int mLocation;
         public TextAreaOutputStream(JTextArea component) {
              this(component, DEFAULT_BUFFER_SIZE);
         public TextAreaOutputStream(JTextArea component, int bufferSize) {
              mText = component;
              if (bufferSize < 1) bufferSize = 1;
              mBuf = new byte[bufferSize];
              mLocation = 0;
         @Override
         public void write(int arg0) throws IOException {
              //System.err.println("arg = "  + (char) arg0);
              mBuf[mLocation++] = (byte)arg0;
              if (mLocation == mBuf.length) {
                   flush();
         public void flush() {
              mText.append(new String(mBuf, 0, mLocation));
              mLocation = 0;
              try {
                   Thread.sleep(1);
              catch (Exception ex) {}
    }

  • Is there a way to make system.out.println() scroll down as it goes?

    I am writing a program where I want to be able to read what's printed out in the console of my IDE through System.out.println() as the program runs/after the program runs. However, right now I run the program, the message prints out, and then when I go to read it the scroll bar is all the way up so I can see only the top of the print-out (the first thing printed out). Is there any way I can get the console to scroll along with the text, kind of like floating boxes you see on various websites for various reasons? In other words, can I get it so that when I look in the console at any given moment of the program running, I am looking at the newest text printed out (the text at the bottom of the "page")? Thank you!

    That would be an IDE problem and not a Java one. You could redirect output into a text file so you can read at your leisure and scroll up and down as much as you like.

  • Is there a way to force System.out.println to run when called

    I working on my first threaded program and having a hard time debugging. I've used System.out.println to let me know what's going on but due (I assume) to the nature of threads the output is not sequential. Is there a way to force println to execute immediatly so that they show up in the order they were called?
    Thanks --- Mike

    mjs1138 wrote:
    endasil, Thanks for the reply. I'm currenlty running the program from within the NetBeans IDE. It is the output displayed by in NetBeans "output" that I'm looking at.
    --- MikeI don't use Netbeans, but I would guess that it too pipes Standard Out and Standard Error to the same console. You didn't address my comment. Are you printing to System.err as well? This happens implicitly if you use Exception.printStackTrace(), for example.

  • 32-bit JDK 7 System.out.println not working in IDE

    Hi folks,
    I have a 64-bit Windows 7 OS.
    Due to 3rd party library/jar dependencies, i had to install the 32-bit Java JDK 1.7 and Eclipse IDE.
    I also installed NetBeans.
    So i have a 64-bit OS and am running 32-bit Java JDK/JRE & IDEs.
    The problem I am having is that my program's System.out.println("...") statements are not outputting strings to either IDE debug console.
    Executing the compiled program from a command line/prompt produces the expected string output.
    The basic "Hello, World" program is enough to cause this behaviour to start occurring.
    I have not manually / intentionally changed any IDE-specific Debug Console or Windows environment settings.
    One caveat: This same environment has worked successfully in the past ?! Yes, this is one of those "..it worked last week & yesterday and today it isn't and i swear i didn't do anything..." issue.
    Thoughts ?

    Thanks for the reply.
    The 64-bit versions of Java & Eclipse were installed first.
    When i discovered I had to use the 32-bit versions, i un-installed the 64-bit ones & installed the 32-bits.
    Even after that initial un-install 64-bit/install 32-bit process, it was working.
    I have also been installing the Windows 7 64-bit OS updates when i am informed of them.
    I'm not sure if any of these would affect how the Eclipse / NetBeans IDEs behave.
    Behaviour has been inconsistent.
    Initially it was always working.
    But over the past several days, it has been working less and less.
    I don't have any large data structures.
    This isn't a large complicated program, couple hundred lines, so i highly doubt that i'm doing anything to the resources, but something has changed.
    The main project I am working on takes command line parameters, does some initial processing, produces output using System.out.printlns [SOP] then depending on the parameters, branches into 2 different processing paths, let's call them A & B. Each of these processing paths also use SOPs. When i run the program in the IDE going thru path A, sometimes the initial SOP statements will work and the SOP statements specific to path A will also work. If i immediately change the parameters to go thru path B & re-run it, not even the initial SOP statements before the branching decision work.
    I've tried doing System.flush()s too - no affect.
    I haven't tried the re-direction option to a file option you mentioned yet.
    It always works from a command prompt - that is telling me that the Java SOPs are working properly, correct ?
    Inside an Eclipse or NetBeans IDE, SOP output to the debug console is inconsistent.
    Running from a command prompt, the SOPs always work.
    It'd help to know if this an IDE issue, a Java issue, a Windows 7 issue so i can narrow down where to try and correct the situation.
    I have a Windows XP VM set up, i'll try running the program there and see if there's a difference.
    Thanks for your reply.

  • How can i put a system.out.println into txt file

    i want to generate a txt file instead of system.out.println. for the output How can i do that and what code can i use for that??
    Edited by: crystalarun on Oct 14, 2007 11:40 AM

    suppose u ant output in "Output.txt"
    then code can be
    PrintStream out = new PrintStream(new FileOutputStream("Output.txt"));
    System.setOut(out)

  • System.out.println () is not working properly

    Hi, Why does this happens:
    Object temp=null;
    System.out.println ("temp is null? "+temp==null);
    just prints: true
    expected: temp is null? true
    Why does this happens????
    If I do System.out.println ("temp is null? "+(temp==null)); it works bu it should work without the pharentesis too

    MelGohan wrote:
    Hi, Why does this happens:
    Object temp=null;
    System.out.println ("temp is null? "+temp==null);
    just prints: trueThat is odd, mine prints "false".
    type Test126.java
    public class Test126 {
        public static void main(String[] args) {
            Object temp=null;
            System.out.println ("temp is null? "+temp);
            System.out.println ("temp is null? "+temp==null);
    }javac Test126.java
    java Test126
    temp is null? null
    false

  • System.out.println in Web Dynpro Java

    I call System.out.println in some components in web dynpro java.  But I cannot find the standard console output file of SAP J2EE Engine. Anyone know where is the location of standard output file?

    Thanks Deepak. Your link blog is working.
    Sreeni: I cannot find a start-up log file. Could you please tell me the real path?
    Edited by: Nuttakorn Boonthamtanarung on Apr 1, 2010 6:58 AM

  • System.out.println not working in Tomcat-4.1.x

    System.out.println not working in Tomcat-4.1.24. Any settings has to be enabled??? I am using tomcat for Solaris

    I think u can use ServletContext.log() to output info instased.

  • Where to see the System.out.println() messages

    I deploy my application in Oracle9ias . I have some System.out.println() statements in java class files.
    When I run the application I need to know where I can see those println() statements.

    The Member Feedback forum is for suggestions and feedback for OTN Developer Services. This forum is not monitored by Oracle support or product teams and so Oracle product and technology related questions will not be answered. We recommend that you post this thread to the Application Server-General forum. The URL is:
    Oracle Application Server - General

  • Where to see the System.out.println statements on soa server.

    Hi,
    I have generated some proxy classes in my jdeveloper. And I have deployed that project to the admin server on my soa_domain.
    Now my java files have some System.out.println statements. I want to see those values.
    Can anyone please let me know where I can see those statements on server.
    What s the file name where i can see.
    do i have to enable some debigging on the server. if yes then for what level i need to enable the log at what level.
    Thanks
    Anoop

    Hi,
    System.out.println is not really a good way to debug in weblogic... If you didn't configure where the stdout will go those messages can end up going nowhere...
    I suggest you use one of these...
    This will go to the soa*diagnostic logs... for example DOMAIN_HOME/servers/soa_server1/soa_server1-diagnostic.log...
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import oracle.fabric.logging.LogFormatter;
        private static final Logger soa_logger = Logger.getLogger("oracle.soa.Logger");
        static {
            LogFormatter.configFormatter(soa_logger);
            soa_logger.log(Level.INFO, message);
            soa_logger.log(Level.INFO, message, t);or
    This will go to the server logs... for example DOMAIN_HOME/servers/soa_server1/soa_server1.log...
    import weblogic.logging.NonCatalogLogger;
        private static NonCatalogLogger weblogic_logger = new NonCatalogLogger("SomeMeaningfulNameHere");
            weblogic_logger.notice(message);
            weblogic_logger.notice(message, t);Usually info and notice will go to the logs by default, you can try with higher levels (error,warning) as well or you can tweek the server debug level to use lower levels...
    Cheers,
    Vlad

  • System.out.println - Hello World Example

    Hi All
    I am using Apache Tomcat and trying t produce a simple output to the browser. Cannot get System.out.println to work. See code and out below:
    begin code
    <HTML>
    <HEAD><TITLE>hello jsp</TITLE></HEAD>
    <BODY>
    <%@ page language='java' contentType='text/html' %>
    <%
    String message = "Hello World";
    message = message + "\nAFTER";
    System.out.println("BEFORE");
    %>
    <%= (message) %>
    </BODY>
    </HTML>
    END code
    --begin browser output
    Hello World AFTER
    end browser ouput
    Would be grateful if someone could explain why the System.out.print statement cannot be seen in the browser output.
    many thanks
    Naresh

    System.out prints to System.out. What that is depends:
    In applets, (which the OP was not talking about) it is the Java Console.
    In JSP, it's the same as any application by default.
    You can change in Java what System.out prints to, but you don't often do this. But in JSP it doesn't print to the browser. JSP is not CGI, which does you the standard out as the destination for written data.

Maybe you are looking for

  • Account set up in withholding tax having two different currencies on dr-cr

    Hi all I am using AP, GL and CE. I have set up a new withholding tax which i have connected it with different supplier sites according to the customer needs. Now we are having a problem: When the customer is registering invoices in foreign currency f

  • HT4847 How do I access pictures from my iCloud from a previous phone?

    Does anyone know how to access photos from the iCloud?  My iCloud from my previous phone shows up on my new one but my old one was broken and I wasn't able to retrieve any information from it.

  • Address bar too long

    How can I list addon icons in a row as in Firefox 30? See attached picture for detail. Update 1: If you customize icons, they will stand in a row, as expected. However they squeeze after firefox restart. Moving around search bar doesn't seem to help.

  • Problems with lost bookmarks, keypad not working, apps shutting down

    Out of the blue, while I was still using Safari, all my bookmarks disappeared. No matter how many times I tried to add a bookmark it doesn't show up on my Bookmarks tab. I've tried adding a new folder on my bookmarks tab but it doesn't work either. I

  • Problem with bb link and z10

    hello, i´ve try to connect my z 10 to pc whith bb link and i can t, it stays a lot of time thinking, and nothing. how can i do a  backup copy of my z 10 whitout bb link, and why in the divice bb protect don´t allow backups?