[Title] Fix logger bug:
authorho.namkoong <ho.namkoong@samsung.com>
Mon, 15 Apr 2013 07:46:14 +0000 (16:46 +0900)
committerho.namkoong <ho.namkoong@samsung.com>
Mon, 15 Apr 2013 07:46:14 +0000 (16:46 +0900)
Change-Id: I0757781f339211b4032cd6a66f951ea684d75d37

12 files changed:
org.tizen.common/src/org/tizen/common/ui/page/preference/Messages.java
org.tizen.common/src/org/tizen/common/ui/page/preference/TizenBasePreferencePage.java
org.tizen.common/src/org/tizen/common/util/log/EclipseAppender.java
org.tizen.common/src/org/tizen/common/util/log/FileAppender.java
org.tizen.common/src/org/tizen/common/util/log/GoogleAnalyticAppender.java
org.tizen.common/src/org/tizen/common/util/log/Level.java
org.tizen.common/src/org/tizen/common/util/log/LoggerConstants.java
org.tizen.common/src/org/tizen/common/util/log/Messages.java
org.tizen.common/src/org/tizen/common/util/log/TizenLog4jConfigurator.java
org.tizen.common/src/org/tizen/common/util/log/UserLogger.java
org.tizen.common/src/org/tizen/common/util/log/messages.properties
org.tizen.common/test/src/org/tizen/common/util/log/FileAppenderTest.java

index 576a112..0fbcc8c 100644 (file)
@@ -58,7 +58,6 @@ public class Messages {
     public static String DES_DEBUG;
     public static String DES_ALL;
     
-    
     static {
         // initialize resource bundle
         NLS.initializeMessages( BUNDLE_NAME, Messages.class );
index 4d916d5..07ea80a 100644 (file)
 
 package org.tizen.common.ui.page.preference;
 
+import org.apache.log4j.Logger;
+import org.apache.log4j.MDC;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.jface.preference.BooleanFieldEditor;
 import org.eclipse.jface.preference.DirectoryFieldEditor;
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseListener;
@@ -44,8 +48,10 @@ import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.tizen.common.CommonPlugin;
+import org.tizen.common.core.application.InstallPathConfig;
 import org.tizen.common.util.SWTUtil;
 import org.tizen.common.util.StringUtil;
+import org.tizen.common.util.log.FileAppender;
 import org.tizen.common.util.log.Level;
 import org.tizen.common.util.log.LoggerConstants;
 
@@ -61,6 +67,7 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
     
     public static final String VALUE_SDKLOCATION_DEFAULT = null;;
     public static final boolean VALUE_SDKUPDATE_DEFAULT = false;
+    private boolean applyOk = true;
     
     /**
      * Option id for getting logger level from preference store
@@ -92,10 +99,8 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
      */
     public static final String OPTION_ID_PERFORM = "org.tizen.common.logger.perform";
     
-    private static final String DEFAULT_LOG_LOCATION = "%X{" + LoggerConstants.KEY_WORKSPACE + "}/.metadata/log.%d";
-    
     private static final int DEFAULT_LEVEL = 1;
-    private static final Level[] LEVELS = {Level.OFF, Level.ERROR, Level.WARNING, Level.INFO, Level.DEBUG, Level.ALL};
+    private static final Level[] LEVELS = {Level.OFF, Level.FATAL, Level.ERROR, Level.WARNING, Level.INFO, Level.DEBUG, Level.TRACE, Level.ALL};
     
     private Text loggerCP;
     private Text loggerLocText;
@@ -286,7 +291,7 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
         
         String loggerPath = prefStore.getString(OPTION_ID_LOCATION);
         if(StringUtil.isEmpty(loggerPath)) {
-            loggerPath = DEFAULT_LOG_LOCATION;
+            loggerPath = LoggerConstants.DEFAULT_LOG_LOCATION;
         }
         
         return loggerPath;
@@ -366,7 +371,7 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
         
         levelScale.setSelection(DEFAULT_LEVEL);
         levelDesLabel.setText(LEVELS[DEFAULT_LEVEL].getDescription());
-        loggerLocText.setText(DEFAULT_LOG_LOCATION);
+        loggerLocText.setText(LoggerConstants.DEFAULT_LOG_LOCATION);
         loggerCP.setText(LoggerConstants.DEFAULT_CONVERSION_PATTERN);
         reportButton.setSelection(false);
         checkLoggerButton();
@@ -379,14 +384,31 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
      */
     @Override
     protected void performApply() {
-        
         Level loggerLevel = LEVELS[levelScale.getSelection()];
+        String loggerLoc = loggerLocText.getText();
+        
+        MDC.put(LoggerConstants.KEY_WORKSPACE, ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
+        MDC.put(LoggerConstants.KEY_SDK_HOME, InstallPathConfig.getSDKPath());
+        Logger rootLogger = Logger.getRootLogger();
+        FileAppender fileAppender = (FileAppender) rootLogger.getAppender(LoggerConstants.NAME_FILE_APPENDER);
+        String result = fileAppender.setFilePath(loggerLoc);
+        MDC.remove(LoggerConstants.KEY_SDK_HOME);
+        MDC.remove(LoggerConstants.KEY_WORKSPACE);
+        
+        if(!StringUtil.isEmpty(result)) {
+            setErrorMessage(result);
+            applyOk = false;
+            return;
+        }
+        
         prefStore.setValue(OPTION_ID_LOCATION, loggerLocText.getText());
         prefStore.setValue(OPTION_ID_LEVEL, loggerLevel.toString());
         prefStore.setValue(OPTION_ID_REPORT, reportButton.getSelection());
         prefStore.setValue(OPTION_ID_USAGE, usageButton.getSelection());
         prefStore.setValue(OPTION_ID_PERFORM, performButton.getSelection());
         prefStore.setValue(OPTION_ID_CP, loggerCP.getText());
+        setErrorMessage(null);
+        applyOk = true;
     }
 
     /**
@@ -396,6 +418,11 @@ public class TizenBasePreferencePage extends FieldEditorPreferencePage implement
     @Override
     public boolean performOk() {
         performApply();
+        
+        if(!applyOk) {
+            return false;
+        }
+        
         return super.performOk();
     }
     
index 7c5f4fc..487190c 100644 (file)
 
 package org.tizen.common.util.log;
 
+import java.text.MessageFormat;
+
 import org.apache.log4j.AppenderSkeleton;
 import org.apache.log4j.EnhancedPatternLayout;
 import org.apache.log4j.Layout;
 import org.apache.log4j.Level;
+import org.apache.log4j.helpers.LogLog;
 import org.apache.log4j.spi.LoggingEvent;
 import org.apache.log4j.spi.ThrowableInformation;
 
@@ -54,7 +57,8 @@ public class EclipseAppender extends AppenderSkeleton{
      */
     public EclipseAppender(Layout layout) {
         super();
-        setLayout(layout);
+        this.setName(LoggerConstants.NAME_ECLIPSE_APPENDER);
+        setLayout(layout); 
     }
     
     @Override
@@ -75,33 +79,38 @@ public class EclipseAppender extends AppenderSkeleton{
      */
     @Override
     protected void append(LoggingEvent arg0) {
-        int level = arg0.getLevel().toInt();
-        ThrowableInformation tI = arg0.getThrowableInformation();
-        Throwable t = null;
-        if(tI != null) {
-            t = tI.getThrowable();
+        try {
+            int level = arg0.getLevel().toInt();
+            ThrowableInformation tI = arg0.getThrowableInformation();
+            Throwable t = null;
+            if(tI != null) {
+                t = tI.getThrowable();
+            }
+            
+            String message = getLayout().format(arg0);
+            
+            switch (level) {
+            case Level.ERROR_INT:
+                Logger.error(message, t);
+                break;
+            case Level.WARN_INT:
+                Logger.warning(message, t);
+                break;
+            case Level.DEBUG_INT:
+                Logger.debug(message, t);
+                break;
+            case Level.FATAL_INT:
+                Logger.error(message, t);
+                break;
+            case Level.INFO_INT:
+                Logger.info(message, t);
+                break;
+            default:
+                break;
+            }
         }
-        
-        String message = arg0.getMessage().toString();
-        
-        switch (level) {
-        case Level.ERROR_INT:
-            Logger.error(message, t);
-            break;
-        case Level.WARN_INT:
-            Logger.warning(message, t);
-            break;
-        case Level.DEBUG_INT:
-            Logger.debug(message, t);
-            break;
-        case Level.FATAL_INT:
-            Logger.error(message, t);
-            break;
-        case Level.INFO_INT:
-            Logger.info(message, t);
-            break;
-        default:
-            break;
+        catch(Throwable t) {
+            LogLog.error(MessageFormat.format("Exception occurred while logging message: {0}", arg0.getMessage()), t);
         }
     }
 }
index 2da03bf..f70d5c5 100644 (file)
@@ -31,6 +31,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.text.MessageFormat;
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -73,7 +74,7 @@ public class FileAppender extends AppenderSkeleton{
         }
     };
     
-    private OutputStream  FILE_OUTPUT_STREAM;
+    OutputStream  FILE_OUTPUT_STREAM;
     private FileAppenderScheduler SCHEDULER;
     private static final Timer TIMER = new Timer("File appender timer", true);
     protected String logPath;
@@ -109,6 +110,7 @@ public class FileAppender extends AppenderSkeleton{
      */
     public FileAppender(String logPath, Layout layout, int bufferSize) {
         super();
+        this.setName(LoggerConstants.NAME_FILE_APPENDER);
         this.logPath = new EnhancedPatternLayout(logPath).format(dummy);
         this.bufferSize = bufferSize;
         setLayout(layout);
@@ -130,12 +132,12 @@ public class FileAppender extends AppenderSkeleton{
      * 
      * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
      */
-    synchronized public void setFilePath( final String path ) {
+    synchronized public String setFilePath( final String path ) {
         IOUtil.tryFlush(FILE_OUTPUT_STREAM);
         IOUtil.tryClose(FILE_OUTPUT_STREAM);
         EnhancedPatternLayout layout = new EnhancedPatternLayout(path);
         this.logPath = layout.format(dummy);
-        initializeAppender();
+        return initializeAppender();
     }
     
     /**
@@ -159,30 +161,36 @@ public class FileAppender extends AppenderSkeleton{
      */
     @Override
     synchronized protected void append(LoggingEvent arg0) {
-        
         try {
-            FILE_OUTPUT_STREAM.write(layout.format(arg0).getBytes());
-            
-            if(getLayout().ignoresThrowable()) {
-                String[] tss = arg0.getThrowableStrRep();
-                if(tss != null) {
-                    for(String ts: tss) {
-                        FILE_OUTPUT_STREAM.write((ts + "\n").getBytes());
+            try {
+                FILE_OUTPUT_STREAM.write(layout.format(arg0).getBytes());
+                
+                if(getLayout().ignoresThrowable()) {
+                    String[] tss = arg0.getThrowableStrRep();
+                    if(tss != null) {
+                        for(String ts: tss) {
+                            FILE_OUTPUT_STREAM.write((ts + "\n").getBytes());
+                        }
                     }
                 }
+            } catch (IOException e) {
+                LogLog.error(Messages.FileAppender_EXCEPTION_WRITING_LOG, e); //$NON-NLS-1$
             }
-        } catch (IOException e) {
-            LogLog.error(Messages.FileAppender_EXCEPTION_WRITING_LOG, e); //$NON-NLS-1$
+    
+            SCHEDULER.cancel();
+            SCHEDULER = new FileAppenderScheduler();
+            TIMER.scheduleAtFixedRate(SCHEDULER, LoggerConstants.DEFAULT_TIMER_PERIOD, LoggerConstants.DEFAULT_TIMER_PERIOD);
+        }
+        catch(Throwable t) {
+            LogLog.error(MessageFormat.format("Exception occurred while logging message: {0}", arg0.getMessage()), t);
         }
-
-        SCHEDULER.cancel();
-        SCHEDULER = new FileAppenderScheduler();
-        TIMER.scheduleAtFixedRate(SCHEDULER, LoggerConstants.DEFAULT_TIMER_PERIOD, LoggerConstants.DEFAULT_TIMER_PERIOD);
     }
 
-    synchronized private void initializeAppender() {
+    synchronized private String initializeAppender() {
         
+        createLogFile(logPath);
         File logFile = new File(logPath);
+        String message = StringUtil.EMPTY_STRING;
         
         if(!logFile.exists()) {
             logFile.getAbsoluteFile().getParentFile().mkdirs();
@@ -191,15 +199,17 @@ public class FileAppender extends AppenderSkeleton{
             } catch (IOException e) {
                 FILE_OUTPUT_STREAM = NOOP_OUTPUT_STREAM;
                 SCHEDULER = NOOP_SCHEDULER;
+                message = NLS.bind(Messages.FileAppender_EXCEPTION_CREATING_LOGFILE, logPath);
                 LogLog.error(NLS.bind(Messages.FileAppender_EXCEPTION_CREATING_LOGFILE, logPath), e); //$NON-NLS-1$
-                return;
+                return message;
             }
         }
         else if(logFile.isDirectory()) {
             FILE_OUTPUT_STREAM = NOOP_OUTPUT_STREAM;
             SCHEDULER = NOOP_SCHEDULER;
+            message = NLS.bind(Messages.FileAppender_EXCEPTION_DIRECTORY_EXISTING, logPath);
             LogLog.error(NLS.bind(Messages.FileAppender_EXCEPTION_DIRECTORY_EXISTING, logPath));
-            return;
+            return message;
         }
 
         IOUtil.tryFlush(FILE_OUTPUT_STREAM);
@@ -209,12 +219,19 @@ public class FileAppender extends AppenderSkeleton{
         } catch (IOException e) {
             FILE_OUTPUT_STREAM = NOOP_OUTPUT_STREAM;
             SCHEDULER = NOOP_SCHEDULER;
+            message = Messages.FileAppender_EXCEPTION_CREATING_BUFFER;
             LogLog.error(Messages.FileAppender_EXCEPTION_CREATING_BUFFER, e); //$NON-NLS-1$
-            return;
+            return message;
         }
         
         SCHEDULER = new FileAppenderScheduler();
         TIMER.scheduleAtFixedRate(SCHEDULER, LoggerConstants.DEFAULT_TIMER_PERIOD, LoggerConstants.DEFAULT_TIMER_PERIOD);
+        return message;
+    }
+
+    private void createLogFile(String logPath2) {
+        // TODO Auto-generated method stub
+        
     }
 
     /**
index 2719072..5a94606 100644 (file)
@@ -34,6 +34,7 @@ import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLEncoder;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 
 import org.apache.log4j.AppenderSkeleton;
@@ -105,6 +106,7 @@ extends AppenderSkeleton
      */
     public GoogleAnalyticAppender(boolean isUsage, boolean isPerform, Layout layout) {
         super();
+        this.setName(LoggerConstants.NAME_GOOGLE_APPENDER);
         this.isUsage = isUsage;
         this.isPerform = isPerform;
         setLayout(layout);
@@ -188,48 +190,53 @@ extends AppenderSkeleton
             final LoggingEvent event
             )
     {
-        rc = 0;
-        ArrayList<String> result = new ArrayList<String>();
         try {
-            if(!assembleString(result, event)) {
+            rc = 0;
+            ArrayList<String> result = new ArrayList<String>();
+            try {
+                if(!assembleString(result, event)) {
+                    return;
+                }
+            } catch (UnsupportedEncodingException e) {
+                LogLog.error("Exception occurred while creating google analytic message", e);
                 return;
             }
-        } catch (UnsupportedEncodingException e) {
-            LogLog.error("Exception occurred while creating google analytic message", e);
-            return;
-        }
-        
-        final String resultData = join(result.toArray(new String[result.size()]));
-        
-        try
-        {
-            final URL u = new URL( URL_GOOGLE_ANALYTIC );
-            final HttpURLConnection con = (HttpURLConnection) u.openConnection();
+            
+            final String resultData = join(result.toArray(new String[result.size()]));
+            
             try
             {
-                con.setDoOutput( true );
-                final OutputStream out = con.getOutputStream();
-                final OutputStreamWriter writer = new OutputStreamWriter( out );
-                writer.write( resultData );
-                writer.flush();
-
-                rc = con.getResponseCode();
-                if ( 200 <= rc && rc < 300 ) 
+                final URL u = new URL( URL_GOOGLE_ANALYTIC );
+                final HttpURLConnection con = (HttpURLConnection) u.openConnection();
+                try
+                {
+                    con.setDoOutput( true );
+                    final OutputStream out = con.getOutputStream();
+                    final OutputStreamWriter writer = new OutputStreamWriter( out );
+                    writer.write( resultData );
+                    writer.flush();
+    
+                    rc = con.getResponseCode();
+                    if ( 200 <= rc && rc < 300 ) 
+                    {
+                        System.out.println("OK");
+                    }
+                }
+                finally
                 {
-                    System.out.println("OK");
+                    con.disconnect();
                 }
-            }
-            finally
+            } catch (MalformedURLException e)
             {
-                con.disconnect();
+                LogLog.debug( String.format("Malformed URL: %s", URL_GOOGLE_ANALYTIC), e );
+            } catch (IOException e)
+            {
+                e.printStackTrace();
+                LogLog.debug( "Exception occurred while transmitting google analytic data.", e );
             }
-        } catch (MalformedURLException e)
-        {
-            LogLog.debug( String.format("Malformed URL: %s", URL_GOOGLE_ANALYTIC), e );
-        } catch (IOException e)
-        {
-            e.printStackTrace();
-            LogLog.debug( "Exception occurred while transmitting google analytic data.", e );
+        }
+        catch(Throwable t) {
+            LogLog.error(MessageFormat.format("Exception occurred while logging message: {0}", event.getMessage()), t);
         }
     }
 
index e9f1dae..cfd09e6 100644 (file)
@@ -58,6 +58,11 @@ public class Level extends org.apache.log4j.Level{
     public static final Level OFF = new Level(org.apache.log4j.Level.OFF, Messages.LOGGER_OFF_DES);
     
     /**
+     * Logging level fatal
+     */
+    public static final Level FATAL = new Level(org.apache.log4j.Level.FATAL, Messages.LOGGER_FATAL_DES);
+    
+    /**
      * Logging level error
      */
     public static final Level ERROR = new Level(org.apache.log4j.Level.ERROR, Messages.LOGGER_ERROR_DES);
@@ -78,6 +83,11 @@ public class Level extends org.apache.log4j.Level{
     public static final Level DEBUG = new Level(org.apache.log4j.Level.DEBUG, Messages.LOGGER_DEBUG_DES);
     
     /**
+     * Logging level trace
+     */
+    public static final Level TRACE = new Level(org.apache.log4j.Level.TRACE, Messages.LOGGER_TRACE_DES);
+    
+    /**
      * Logging level all
      */
     public static final Level ALL = new Level(org.apache.log4j.Level.ALL, Messages.LOGGER_ALL_DES);
index ce06ef6..774f8d7 100644 (file)
@@ -34,7 +34,7 @@ public class LoggerConstants {
     /**
      * Default conversion pattern
      */
-    public static final String DEFAULT_CONVERSION_PATTERN = "[%p] %F(%L) - %m%n";
+    public static final String DEFAULT_CONVERSION_PATTERN = "[%-5p] %F(%L) - %m%n";
     
     /**
      * Default buffer size
@@ -55,5 +55,35 @@ public class LoggerConstants {
      * Default sdk home key which will be used in {@link Layout}
      */
     public static final String KEY_SDK_HOME = "tizensdk";
+    
+    /**
+     * File appender name
+     */
+    public static final String NAME_FILE_APPENDER = "TIZEN_FILE_APPENDER";
+    
+    /**
+     * Eclipse appender name
+     */
+    public static final String NAME_ECLIPSE_APPENDER = "TIZEN_ECLIPSE_APPENDER";
+    
+    /**
+     * Google appender name
+     */
+    public static final String NAME_GOOGLE_APPENDER = "TIZEN_GOOGLE_APPENDER";
 
+    /**
+     * Async appender name
+     */
+    public static final String NAME_ASYNC_APPENDER = "TIZEN_ASYNC_APPENDER";
+
+    /**
+     * User logger name
+     */
+    public static final String NAME_USER_LOGGER = "UserLogger";
+    
+    /**
+     * Default log file location
+     */
+    public static final String DEFAULT_LOG_LOCATION = "%X{" + LoggerConstants.KEY_WORKSPACE + "}/.metadata/log.%d{yyyy-MM-dd HH-mm-ss}";
+    
 }
index 30bd24b..f804757 100644 (file)
@@ -49,6 +49,8 @@ public class Messages {
     public static String LOGGER_INFO_DES;
     public static String LOGGER_DEBUG_DES;
     public static String LOGGER_ALL_DES;
+    public static String LOGGER_FATAL_DES;
+    public static String LOGGER_TRACE_DES;
     
     static {
         NLS.initializeMessages(BUNDLE_NAME, Messages.class);
index 850d665..b0a8516 100644 (file)
@@ -27,7 +27,6 @@ package org.tizen.common.util.log;
 
 import java.io.InputStream;
 import java.net.URL;
-
 import org.apache.log4j.AsyncAppender;
 import org.apache.log4j.EnhancedPatternLayout;
 import org.apache.log4j.Logger;
@@ -47,13 +46,6 @@ import org.tizen.common.ui.page.preference.TizenBasePreferencePage;
  */
 public class TizenLog4jConfigurator extends DOMConfigurator implements IPropertyChangeListener  {
     
-    private static Logger rootLogger;
-    private static Logger userLogger;
-    private static FileAppender fileAppender;
-    private static AsyncAppender asyncAppender;
-    private static GoogleAnalyticAppender googleAppender;
-    private static EclipseAppender eclipseAppender;
-    
     private static final EnhancedPatternLayout layout = new EnhancedPatternLayout();
     
     @Override
@@ -75,38 +67,31 @@ public class TizenLog4jConfigurator extends DOMConfigurator implements IProperty
     }
     
     private void configUserLogger() {
-        userLogger = Logger.getLogger(UserLogger.NAME_USER_LOGGER);
-        asyncAppender = new AsyncAppender();
-        googleAppender =  new GoogleAnalyticAppender(TizenBasePreferencePage.isUsage(), TizenBasePreferencePage.isPerform(), layout);
+        Logger userLogger = Logger.getLogger(LoggerConstants.NAME_USER_LOGGER);
+        AsyncAppender asyncAppender = new AsyncAppender();
+        asyncAppender.setName(LoggerConstants.NAME_ASYNC_APPENDER);
+        GoogleAnalyticAppender googleAppender =  new GoogleAnalyticAppender(TizenBasePreferencePage.isUsage(), TizenBasePreferencePage.isPerform(), layout);
         asyncAppender.addAppender(googleAppender);
         userLogger.addAppender(asyncAppender);
+        userLogger.setLevel(Level.ALL);
     }
 
     private void configRootLogger(LoggerRepository arg1) {
-        Logger _rootLogger = arg1.getRootLogger();
-        rootLogger = _rootLogger;
+        Logger rootLogger = arg1.getRootLogger();
         rootLogger.removeAllAppenders();
         rootLogger.setLevel(TizenBasePreferencePage.getLoggerLevel());
         
         MDC.put(LoggerConstants.KEY_WORKSPACE, ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
         MDC.put(LoggerConstants.KEY_SDK_HOME, InstallPathConfig.getSDKPath());
-        fileAppender = new FileAppender(TizenBasePreferencePage.getLogLocation(), layout);
+        FileAppender fileAppender = new FileAppender(TizenBasePreferencePage.getLogLocation(), layout);
         rootLogger.addAppender(fileAppender);
         MDC.remove(LoggerConstants.KEY_WORKSPACE);
         MDC.remove(LoggerConstants.KEY_SDK_HOME);
         
-        eclipseAppender = new EclipseAppender(layout);
+        EclipseAppender eclipseAppender = new EclipseAppender(layout);
         rootLogger.addAppender(eclipseAppender);
     }
 
-    private void setLogFilePath(String name) {
-        MDC.put(LoggerConstants.KEY_WORKSPACE, ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
-        MDC.put(LoggerConstants.KEY_SDK_HOME, InstallPathConfig.getSDKPath());
-        fileAppender.setFilePath(name);
-        MDC.remove(LoggerConstants.KEY_WORKSPACE);
-        MDC.remove(LoggerConstants.KEY_SDK_HOME);
-    }
-
     /**
      * {@inheritDoc}
      * 
@@ -116,33 +101,37 @@ public class TizenLog4jConfigurator extends DOMConfigurator implements IProperty
     public void propertyChange(PropertyChangeEvent event) {
         String property = event.getProperty();
         
-        if(property.equals(TizenBasePreferencePage.OPTION_ID_LOCATION)) {
-            String newPath = (String) event.getNewValue();
-            
-            setLogFilePath(newPath);
-        }
-        else if(property.equals(TizenBasePreferencePage.OPTION_ID_LEVEL)) {
+        Logger rootLogger = Logger.getRootLogger();
+        Logger userLogger = Logger.getLogger(LoggerConstants.NAME_USER_LOGGER);
+        AsyncAppender asyncAppender = (AsyncAppender) userLogger.getAppender(LoggerConstants.NAME_ASYNC_APPENDER);
+        GoogleAnalyticAppender googleAppender = (GoogleAnalyticAppender) asyncAppender.getAppender(LoggerConstants.NAME_GOOGLE_APPENDER);
+        if(property.equals(TizenBasePreferencePage.OPTION_ID_LEVEL)) {
             String loggerLevel = (String) event.getNewValue();
             Level level = TizenBasePreferencePage.getLoggerLevel(loggerLevel);
             rootLogger.setLevel(level);
-            userLogger.setLevel(level);
         }
         else if(property.equals(TizenBasePreferencePage.OPTION_ID_REPORT)) {
-            boolean isReport = (Boolean) event.getNewValue();
-            if(isReport) {
-                asyncAppender.addAppender(googleAppender);
-            }
-            else {
-                asyncAppender.removeAppender(googleAppender);
+            if(asyncAppender != null && googleAppender != null) {
+                boolean isReport = (Boolean) event.getNewValue();
+                if(isReport) {
+                    asyncAppender.addAppender(googleAppender);
+                }
+                else {
+                    asyncAppender.removeAppender(googleAppender);
+                }
             }
         }
         else if(property.equals(TizenBasePreferencePage.OPTION_ID_USAGE)) {
-            boolean isUsage = (Boolean) event.getNewValue();
-            googleAppender.setUsage(isUsage);
+            if(googleAppender != null) {
+                boolean isUsage = (Boolean) event.getNewValue();
+                googleAppender.setUsage(isUsage);
+            }
         }
         else if(property.equals(TizenBasePreferencePage.OPTION_ID_PERFORM)) {
-            boolean isPerform = (Boolean) event.getNewValue();
-            googleAppender.setUsage(isPerform);
+            if(googleAppender != null) {
+                boolean isPerform = (Boolean) event.getNewValue();
+                googleAppender.setUsage(isPerform);
+            }
         }
         else if(property.equals(TizenBasePreferencePage.OPTION_ID_CP)) {
             String cp = (String) event.getNewValue();
index fbd71f8..72cc88c 100644 (file)
@@ -42,10 +42,9 @@ public class UserLogger {
     protected static ThreadLocalMap<String, Long> id2perform = new ThreadLocalMap<String, Long>();
 
     private static final String FQCN = UserLogger.class.getName();
-    public static final String NAME_USER_LOGGER = "UserLogger";
     private static final SimpleDateFormat logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
 
-    private static Logger logger = Logger.getLogger(NAME_USER_LOGGER);
+    private static Logger logger = Logger.getLogger(LoggerConstants.NAME_USER_LOGGER);
 
     /**
      * Report page information with a category
@@ -65,11 +64,8 @@ public class UserLogger {
      * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
      */
     public static void page(String category, Throwable t) {
-        if (Level.PAGE.isGreaterOrEqual(logger.getEffectiveLevel())) {
-            Page message = new Page(category);
-            System.out.println("LOGGING IN");
-            logger.log(FQCN, Level.PAGE, message, t);
-        }
+        Page message = new Page(category);
+        logger.log(FQCN, Level.PAGE, message, t);
     }
     
     /**
@@ -102,10 +98,8 @@ public class UserLogger {
      * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
      */
     public static void event(String category, String action, Throwable t) {
-        if (Level.EVENT.isGreaterOrEqual(logger.getEffectiveLevel())) {
-            Event message = new Event(category, action);
-            logger.log(FQCN, Level.EVENT, message, t);
-        }
+        Event message = new Event(category, action);
+        logger.log(FQCN, Level.EVENT, message, t);
     }
 
     /**
@@ -126,13 +120,10 @@ public class UserLogger {
      * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
      */
     public static void start(String category, String variableName) {
-        if(Level.PERFORM_START.isGreaterOrEqual(logger.getEffectiveLevel())) {
-            
-            long start = System.currentTimeMillis();
-            id2perform.put( category + variableName, start );
-            PerformanceInfo message = new PerformanceInfo(category, start, 0, variableName);
-            logger.log(FQCN, Level.PERFORM_START, message, null);
-        }
+        long start = System.currentTimeMillis();
+        id2perform.put( category + variableName, start );
+        PerformanceInfo message = new PerformanceInfo(category, start, 0, variableName);
+        logger.log(FQCN, Level.PERFORM_START, message, null);
     }
 
     /**
@@ -153,16 +144,14 @@ public class UserLogger {
      * @author Ho Namkoong {@literal <ho.namkoong@samsung.com>} (S-Core)
      */
     public static void end(String category, String variableName) {
-        if (Level.PERFORM_END.isGreaterOrEqual(logger.getEffectiveLevel())) {
-            long end = System.currentTimeMillis();
-            Long start = id2perform.remove(category + variableName);
-            if (null == start) {
-                return;
-            }
-            
-            PerformanceInfo message = new PerformanceInfo(category, start, end, variableName);
-            logger.log(FQCN, Level.PERFORM_END, message, null);
+        long end = System.currentTimeMillis();
+        Long start = id2perform.remove(category + variableName);
+        if (null == start) {
+            return;
         }
+        
+        PerformanceInfo message = new PerformanceInfo(category, start, end, variableName);
+        logger.log(FQCN, Level.PERFORM_END, message, null);
     }
     
     /**
index 68d6113..4d452a7 100644 (file)
@@ -3,10 +3,12 @@ FileAppender_EXCEPTION_CREATING_LOGFILE=Exception occurred while creating log fi
 FileAppender_EXCEPTION_FLUSHING_BUFFER=Exception occurred while flushing buffer.
 FileAppender_EXCEPTION_WRITING_LOG=Exception occurred while writing log message.
 FileAppender_EXCEPTION_DIRECTORY_EXISTING=Log File {0} already exists as a directory.
-LOGGER_OFF_DES=off
-LOGGER_ERROR_DES=error
-LOGGER_WARNING_DES=warning
-LOGGER_INFO_DES=info
-LOGGER_DEBUG_DES=debug
-LOGGER_ALL_DES=all
-UserLogger_EVENT_STRING=Category: {0}\tAction: {1}
+LOGGER_FATAL_DES=FATAL: very severe error events that will presumably lead the application to abort
+LOGGER_TRACE_DES=TRACE: finer-grained informational events than the DEBUG
+LOGGER_OFF_DES=OFF: the highest possible rank and is intended to turn off logging
+LOGGER_ERROR_DES=ERROR: error events that might still allow the application to continue running
+LOGGER_WARNING_DES=WARNING: events that are potentially harmful situations
+LOGGER_INFO_DES=INFO: informational messages that highlight the progress of the application at coarse-grained level
+LOGGER_DEBUG_DES=DEBUG: fine-grained informational events that are most useful to debug an application
+LOGGER_ALL_DES=ALL: the lowest possible rank and is intended to turn on all logging
+UserLogger_EVENT_STRING=Category: {0}\tAction: {1}
\ No newline at end of file
index d5e09a6..f1a5644 100644 (file)
@@ -42,7 +42,7 @@ import org.tizen.common.util.StringUtil;
 
 public class FileAppenderTest {
 
-    private static final String TEST_LOG_FILE_FIRST = "test1.txt";
+    private static final String TEST_LOG_FILE_FIRST = "log.2013-04-15 13'16'11";
     private static final String TEST_LOG_FILE_SECOND = "test2.txt";
     private static final String TEST_LOG_FILE_NOOP = "noop.txt";
     private static final String RESULT = "A";
@@ -218,6 +218,7 @@ public class FileAppenderTest {
         }
         
         TEST_LAYOUT.setConversionPattern("%m");
+        appender.FILE_OUTPUT_STREAM.close();
         appender = null;
     }