ceving
ceving

Reputation: 23754

How to define an additional Java log level?

The standard Java logging defines the following log levels:

This is incompatible to RFC 5424, because it lacks a NOTICE level between INFO and WARNING. Java lacks some additional log levels (error, critical, alert and emergency) but NOTICE is the one which hurts me.

Is there any way to extend the list of possible log levels in order to add the missing NOTICE level? Or is it necessary to rewrite the whole logging?

Upvotes: 0

Views: 2102

Answers (3)

ceving
ceving

Reputation: 23754

Thanks to Evgeniy. This is the complete example:

SyslogLevel

import java.util.logging.Level;

public class SyslogLevel extends Level
{
    public static SyslogLevel EMERG   = new SyslogLevel("EMERG",   1100);
    public static SyslogLevel ALERT   = new SyslogLevel("ALERT",   1000);
    public static SyslogLevel ERR     = new SyslogLevel("ERR",     950);
    public static SyslogLevel WARNING = new SyslogLevel("WARNING", 900);
    public static SyslogLevel NOTICE  = new SyslogLevel("NOTICE",  850);
    public static SyslogLevel INFO    = new SyslogLevel("INFO",    800);
    public static SyslogLevel DEBUG   = new SyslogLevel("DEBUG",   300);

    protected SyslogLevel (String name, int value, String resourceBundleName)
    {
        super (name, value, resourceBundleName);
    }

    protected SyslogLevel (String name, int value)
    {
        super (name, value);
    }
}

logging

import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;

public class logging
{
    public static void main(String[] args)
    {
        Logger logger = Logger.getLogger ("MyLog");
        FileHandler fh;
        try {
            fh = new FileHandler ("logging.log", true);
            logger.addHandler (fh);
            logger.setLevel (Level.ALL);
            fh.setFormatter (new SimpleFormatter());
            logger.log (SyslogLevel.NOTICE, "Run!");
        }
        catch (java.io.IOException e) {
            e.printStackTrace ();
        }
    }
}

Upvotes: 2

Evgeniy Dorofeev
Evgeniy Dorofeev

Reputation: 135992

This should work

class Level2 extends Level {
    public static final Level2 NOTICE = new Level2("NOTICE", 850);

    private Level2(String name, int level) {
        super(name, level);
    }
}

Upvotes: 2

UVM
UVM

Reputation: 9914

You can extend the Level class and provide more capabilties.

Upvotes: 1

Related Questions