« Return to Thread: log4j logger question

Re: log4j logger question

by Tamás Cservenák :: Rate this Message:

Reply to Author | View in Thread

Hi there,

I am not sure is this is the best approach....

Why not simply create ArtifactRetrievalLoggerEventInspector, that fully uses SLF4J goodies (the "lowest common denominator" logging framework in nexus), obtain a dedicated log category (ie. nexus.artifact.download) and configure it in nexus log configuration manually?

In the example above, you are calling initLog() on _every_ event, and that may happen too often (think about crawling a repo with some task like reindex).

Also, are you interested in internal Retrieve event (that is fired on _every_ retrieve, just like the "internal" retrieve of reindex task) or only the incoming HTTP GETs? In latter case, it would be more convenient to address the restlet LogService instead of having an EventListener....

~t~

On Tue, Apr 14, 2009 at 7:34 PM, K H <kehsiao@...> wrote:

Hi Nexus team,

I'm implementing a plugin to inspect the artifacts retrival event and log
the desirable artifacts/event
information to a log file. I'm able to retrive the artifacts/event
information w/o issue. The problem is in the logging portion of my code. I
receive "NullPointer" error as shown below from nexus log below:
---------------------------------------------------------------------------------------------------------------------------------------
2009-04-13 21:42:06 INFO  [pool-2-thread-2] - o.s.n.p.s.r.RemoteR~:apacheH~
- Remote storage settings      change
detect
ed, updating HttpClient...
2009-04-13 21:42:08 WARN  [qtp0-0         ] - o.s.n.e.EventInspec~:default
- EventInspector
hint='PluginEventInspe
ctor' class='com.cisco.surf.tools.nexus.logger.PluginEventInspector' had
problem inspecting an event='class
org.son
atype.nexus.proxy.events.RepositoryItemEventRetrieve'
java.lang.NullPointerException
       at
com.cisco.surf.tools.nexus.logger.PluginEventInspector.initializeLog(PluginEventInspector.java:134)
       at
com.cisco.surf.tools.nexus.logger.PluginEventInspector.inspect(PluginEventInspector.java:74)
       at
org.sonatype.nexus.events.DefaultEventInspectorHost.processEvent(DefaultEventInspectorHost.java:48)
       at
org.sonatype.nexus.events.DefaultEventInspectorHost.onProximityEvent
(DefaultEventInspectorHost.java:63)
       at

---------------------------------------------------------------------------------------------------------------------------------------

Basically, the PluginEvenInspector class extends AbstractEventInspector.
This class extracts the
RepositoryItemEventRetrival event and calls the TestLogging class to add
additional log4j configuration.
The reason for adding the additional logger "mylogfile" configuration is to
support logging contents
of the PluginEventInspector class to the main logger "logfile" (nexus.log)
and only selected information such as the artifacts name and requester IP
address to the child logger "mylogfile" (artifactsRetrival.log).

---------------------------------------------------------------------------------------------------------------------------------------
public class TestLogging
   extends SimpleLog4jConfig
{

   private File aLog;

   public TestLogging( SimpleLog4jConfig logConfig, File testLog )
   {
       super( logConfig.getRootLogger(),
logConfig.getFileAppenderLocation(),
logConfig.getFileAppenderPattern() );
       this.aLog = testLog;
   }

   @Override
   public Map<String, String> toMap()
   {
       Map<String, String> configs = new LinkedHashMap<String, String>();

       configs.put( " key", "value " );
       configs.put(
"log4j.logger.com.cisco.surf.tools.nexus.logger.PluginEventInspector",
"INFO, mylogfile"
);
       configs.put( "log4j.appender.mylogfile",
"org.apache.log4j.DailyRollingFileAppender" );
       configs.put( "log4j.appender.mylogfile.File", aLog.getAbsolutePath()
);
       configs.put( "log4j.appender.mylogfile.Append", "true" );
       configs.put( "log4j.appender.mylogfile.DatePattern", "'.'yyyy-MM-dd"
);
       configs.put( "log4j.appender.mylogfile.layout",
"org.sonatype.nexus.log4j.ConcisePatternLayout" );
       configs.put( "log4j.appender.mylogfile.layout.ConversionPattern",
"%4d{yyyy-MM-dd HH:mm:ss} %-5p [%-
15.15t] - %c - %m%n" );

       return configs;
   }
}
---------------------------------------------------------------------------------------------------------------------------------------
public class PluginEventInspector
   extends AbstractEventInspector
{

   private static String LOG_NAME = "artifactsRetrival.log";
   private LogManager logManager;
   private Nexus nexus;

   public boolean accepts( AbstractEvent evt )
   {
       return evt instanceof RepositoryItemEventRetrieve;
   }

   public void inspect( AbstractEvent evt )
   {
       RepositoryItemEvent repositoryEvent = (RepositoryItemEvent) evt;
       StorageItem repositoryItem = repositoryEvent.getItem();
       initializeLog();
       final Logger log = Logger.getLogger("mylogfile");
       log.info("Start logging................");

       if (evt instanceof RepositoryItemEventRetrieve)
       {
           ......
       }
    }

    private void initializeLog()
    {

             File nexusLog = this.logManager.getLogFile("nexus.log");
             File myLog = new File(nexusLog.getParentFile(),LOG_NAME);

        try {
                SimpleLog4jConfig logConfig = new TestLogging(nexus.getLogConfig(),
myLog);
                logManager.setLogConfig(logConfig);

        } catch (IOException e) {
                //todo: do nothing for now
        }

    }
}
--
View this message in context: http://www.nabble.com/log4j-logger-question-tp23044216p23044216.html
Sent from the Nexus Maven Repository Manager Dev List mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: nexus-dev-unsubscribe@...
For additional commands, e-mail: nexus-dev-help@...


 « Return to Thread: log4j logger question