Запись дублирующих данных при использовании Log4j в веб-сервисе Jboss - PullRequest
0 голосов
/ 15 декабря 2010

Я использую Log4j с веб-сервисом Jboss EJB.Я регистрирую поток приложения в файле.

Это код, который я использую для регистрации

 FileAppender fileappender;

    File file = new File("jws_" + getCurrentDate("dd_MMM_yyyy") + ".log");

            Logger log = null;
    System.out.println(file.getAbsolutePath() );
    try
    {
        log = Logger.getLogger(ConnMan.class);
        fileappender = new FileAppender(new PatternLayout(),"f2cjws_" + getCurrentDate("dd_MMM_yyyy") + ".log");
        log.addAppender(fileappender);


                    if (!theLogLevel.equalsIgnoreCase("error"))
                    {
                        if ("yes".equalsIgnoreCase(getProperties().getProperty("log")))
                        {
                            log.debug(getCurrentDate("dd MMM yyyy HH:mm:ss 1")+" "+theError);
                        }
                    }
                    else
                    {
                        log.debug(getCurrentDate("dd MMM yyyy HH:mm:ss 1")+" "+theError);
                    }

    }
    catch (IOException e)
    {
        System.out.println("Logger failed due to "+e.getMessage());
    }
    catch(Exception e)
    {
        System.out.println("Logger failed due to "+e.getMessage());
    }

Когда я запускаю приложение, я получаю дубликаты данных в моем файле, т.е.., одни и те же данные пишутся дважды или трижды.Приведенный выше код прекрасно работал в веб-приложении, развернутом в tomcat.

Так что я чувствую, что упускаю что-то в связи с JBoss.

Этот веб-сервис в настоящее время использует свойства log4j, встроенные в сервер.Могу ли я узнать, как заставить его использовать собственный файл свойств приложения?

Пожалуйста, помогите мне,

Заранее спасибо,

Ответы [ 2 ]

2 голосов
/ 15 декабря 2010

Вам нужно создать свой собственный редактор журналов,

public final class LogWriter
{

    private static Logger appLogger = null;

    private static String className = LogWriter.class.getName() + ".";

    static
    {
        try
        {
            appLogger = Logger.getLogger("Demologer");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void logDebug(String message)
    {
        appLogger.log(className, Level.DEBUG, LogWriter.getMessage(message), null);
    }


    public static void logInfo(String message)
    {
        appLogger.log(className, Level.INFO, LogWriter.getMessage(message), null);
    }

    public static void logError(String message)
    {
        appLogger.log(className, Level.ERROR, LogWriter.getMessage(message), null);
    }

    private static String getMessage(String message)
    {
        String retValue;

        Calendar cale = Calendar.getInstance();
        Date now = cale.getTime();

        //retValue=now.getDate()+"/"+(now.getMonth()+1)+"/"+(now.getYear()+1900)+"  "+now.getHours()+":"+now.getMinutes()+":"+now.getSeconds();
        retValue = now + "\n";

        now = null;
        cale = null;

        return retValue + message;
    }
}

Вы можете использовать его по своему усмотрению.

1 голос
/ 15 декабря 2010

Если у вас есть что-то вроде следующего в ваших log4j.properties, вы увидите дубликаты в выводе:

log4j.rootLogger=error, myappender
log4j.logger.com.sample=warn, myappender 
log4j.logger.com.sample.deeper.package=all, myappender 

исправить это на:

log4j.rootLogger=error, myappender
log4j.logger.com.sample=warn 
log4j.logger.com.sample.deeper.package=all

Edit:

Далее будут записываться журналы фатальной ошибки и уровня ошибок из всех классов, журналы фатальной ошибки, журналы ошибок и предупреждений из классов com.sample. * И все журналы из com.sample.deeper.package. * Классы в / var / log / myappender /myappender.log файл.

Сохранить как log4j.properties в вашем корневом пакете:

# This appender is not used in this example.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c - %m%n

# But this one is used.
log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.DatePattern='.'yyyy-MM-dd
log4j.appender.myappender.File=/var/log/myappender/myappender.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%d{ABSOLUTE} %5p %c - %m%n
log4j.appender.myappender.Encoding=UTF-8

log4j.rootLogger=error, myappender
log4j.logger.com.sample=warn 
log4j.logger.com.sample.deeper.package=all

В каждом вашем классе вам нужен регистратор:

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

И вам больше не нужен код, который у вас есть в вопросе.

...