Le Touilleur ExpressLe Touilleur ExpressLe Touilleur ExpressLe Touilleur Express
  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express

Log4J and ANSI colors in a xterm

    Home Java Log4J and ANSI colors in a xterm

    Log4J and ANSI colors in a xterm

    Par Nicolas Martignole | Java | Commentaires fermés | 4 août, 2005 | 0 | 1 090 affichages
         

    The product I am currently developing is a unix server for market datas. Log4J is being use for trace and debug. If you also use Log4J in your Java program, and your program generates traces in a term, this might interest you. I wrote a simple Log4J appender that generates ANSI colors for any Log4J trace. If your application outputs a DEBUG message, a green string message is outputed to the xterm. This appender doesn’t work under Windows 2000 and NT4. It might be interesting for any console java application such as JBoss if your xterm has support for colors. Feel free to use it but don’t forget to send me credits if you include-it in your apps.

    /**
    * Copyright (c) 2004-2008 Nicolas Martignole
    * All rights reserved
    * http://www.jroller.com/page/Trecollo/Weblog
    * https://www.touilleur-express.fr
    * Created by : Nicolas Martignole
    * Date: 13 oct. 2004 Time: 15:12:23
    */
    package com.reuters.pds.common.sdk.util;
    
    import org.apache.log4j.Layout;
    import org.apache.log4j.Level;
    import org.apache.log4j.WriterAppender;
    import org.apache.log4j.spi.LoggingEvent;
    import org.apache.log4j.spi.ThrowableInformation;
    
    /**
     * ANSIColorAppender is a Log4J Appender that output LoggingEvent messages using ANSI colors.
     *
     * Each level (DEBUG,INFO,WARN) has its own color that you can customize.
     * To use this file, in your log4j.properties or log4j.xml specify ANSIColorAppender
     * instead of a ConsoleAppender.
     *
     * @author Nicolas Martignole (nicolas_at_martignole_dot_net)
     * @version 13 oct. 2004
     */
    public class ANSIColorAppender extends WriterAppender {
        /**
         * Method from Log4j AppenderSkeleton that gets call for any Log4J events.
         *
         * @param event
         * @see org.apache.log4j.AppenderSkeleton
         */
        public void append(LoggingEvent event) {
            System.out.print(colorizeToANSI(layout.format(event), event.getLevel(), event.getThrowableInformation()));
        }
    
        /**
         * Requires a layout
         *
         * @return true
         */
        public boolean requiresLayout() {
            return true;
        }
    
        /**
         * This method overrides the parent {@link WriterAppender#closeWriter}
         * implementation to do nothing because the console stream is not ours to close.
         */
        protected final void closeWriter() {
        }
    
        /**
         * @param layout
         */
        public void setLayout(Layout layout) {
            super.setLayout(layout);
        }
    
        /**
         * Colorizes the specified message for the specified log4j level.
         * To get a list of available colors see url http://pueblo.sourceforge.net/doc/manual/ansi_color_codes.html.
         */
        private String colorizeToANSI(Object message, Level level, ThrowableInformation ti) {
            StringBuffer oBuffer = new StringBuffer();
            switch (level.toInt()) {
                case Level.ALL_INT:
                    oBuffer.append("\u001b[1m\u001b[30m");
                    break;
                case Level.FATAL_INT:
                    oBuffer.append("\u001b[1m\u001b[31m");
                    break;
                case Level.ERROR_INT:
                    oBuffer.append("\u001b[31m");
                    break;
                case Level.WARN_INT:
                    oBuffer.append("\u001b[35m");
                    break;
                case Level.INFO_INT:
                    oBuffer.append("\u001b[34m");
                    break;
                case Level.DEBUG_INT:
                    oBuffer.append("\u001b[32m");
                    break;// dark green
            }
            oBuffer.append(message);
            oBuffer.append("\u001b[0m");
    
            // Print in red the whole exception stack trace
            if (ti != null) {
                String s[] = ti.getThrowableStrRep();
                for (int i = 0; i < s.length; i++) {
                    oBuffer.append("\n\u001b[31m");
                    oBuffer.append(s[i]);
                    oBuffer.append("\u001b[0m");
                }
            }
            oBuffer.append("\u001b[0m");
            return oBuffer.toString();
        }
    
    }
    

    Articles similaires:

    Default ThumbnailAdieu System.out.println, vive Log4J Default ThumbnailByteArrayOutputStream: vive les buffers de taille variable Default ThumbnailLog4J et log4j.xml Default ThumbnailLog4J etait capable de recharger un fichier de conf XML automatiquement
    ant, log4j

    Recent Posts

    • GitHub Actions : le tueur de Jenkins ?

      Avouez-le : ce titre de blog est super racoleur. J’avais aussi pensé

      15 février, 2021
    • Comment recréer du lien social dans l’Entreprise avec des outils numériques en 2021

      Nous sommes en février 2021 pendant le 3ème confinement lié à la

      10 février, 2021
    • FizzBuzz en Java et Scala (surtout Scala)

      L’exercice FizzBuzz est un petit exercice très simple, à tester par exemple

      9 février, 2021

    Recent Tweets

    •  @cblavier  Tu as testé html ? https://t.co/O8gTvI45Bt

      3 hours ago
    • J’aime beaucoup le framework CSS léger Tailwind. Suis en train de recoder la partie publique du CFP de devoxx pour… https://t.co/wE8mWqVROs

      4 hours ago
    •  @cblavier   @glaforge   @doctolib  lol 😂

      5 hours ago
    •  @glaforge   @doctolib  😂 le B.A ba pour une ordonnance reussie. Imagine si on faisait cela pour les tickets Jira !

      7 hours ago
    •  @ponceto91  J ai commencé sur cette machine grâce à mon père qui avait ramené cela un jour. Malheureusement il est d… https://t.co/9eIjvKuw2J

      20 hours ago

    Mots clés

    agile (18) ajax (11) Apple (11) architecture (6) barcamp (5) BarCampJavaParis (5) ddd (5) devoxx (33) esb (6) exo (6) flex (9) geek (5) google (11) grails (5) groovy (10) humeur (12) humour (7) independant (6) iphone (12) Java (77) javascript (7) jazoon (28) jboss (22) jboss seam (12) jsf (9) jug (16) Linux (11) mac (6) mule (5) parisjug (7) paris jug (22) pjug (6) play (8) playframework (6) portlet (5) recrutement (6) ria (8) Scala (21) scrum (44) spring (23) Startup (11) usi (21) usi2010 (9) web (16) xebia (7)

    Le Touilleur Express

    Contactez-moi : nicolas@touilleur-express.fr

    Suivez-moi sur Twitter : @nmartignole

    Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
    • A propos de l’auteur
    • A propos du Touilleur Express
    Le Touilleur Express