• Icon: New Feature New Feature
    • Resolution: Duplicate
    • Icon: Major Major
    • 4.3.0
    • 4.2.0
    • Plugin core
    • None
    • 4.3 RC2

      var AmetysHomeHelper = Java.type('AmetysHomeHelper');    
      var PatternLayout = Java.type('org.apache.log4j.PatternLayout');    
      var FileAppender = Java.type('org.apache.log4j.FileAppender');    
      var Level = Java.type('org.apache.log4j.Level');    
      var LogManager = Java.type('org.apache.log4j.LogManager');    
      
      function createNewLogFile(category, level)    
      {       
          var logger = LogManager.getLogger(category);    
          logger.setAdditivity(false);    
          logger.setLevel(Level.toLevel(level));
          if (logger.getAppender(category) == null)  
          {    
              var filename = AmetysHomeHelper.getAmetysHome() + "/logs/" + category + ".log";    
              var layout = new PatternLayout("%d %-5p [%c] (%t;%X{requestURI}) %m%n");    
              var fileAppender = new FileAppender(layout, filename);    
              fileAppender.activateOptions(); 
              fileAppender.setName(category)    
              logger.addAppender(fileAppender);    
          }  
               
          return logger;    
      }

      Use it like this:

      var logger = createNewLogFile("script", "info");    
      logger.info("Blablabla...");

          [RUNTIME-3153] [Script] Add a logger utils

          Bérénice Maurel added a comment - - edited
          <?xml version="1.0" encoding="UTF-8"?>
          <function class="org.ametys.plugins.core.ui.script.StaticConfigurableScriptBinding">
              <descriptions>
                  <description>
                      <name>getLogger</name>
                      <text i18n="true">PLUGINS_RUNTIME_SCRIPT_FCT_GET_LOGGER</text>
                  </description>
              </descriptions>
              <script>
          var getLogger = (function() {
              // Imports
              var LogManager = Java.type("org.apache.log4j.LogManager");
              var Level = Java.type("org.apache.log4j.Level");
              var AmetysHomeHelper = Java.type("org.ametys.runtime.util.AmetysHomeHelper");
              var PatternLayout = Java.type("org.apache.log4j.PatternLayout");
              var RollingFileAppender = Java.type("org.apache.log4j.rolling.RollingFileAppender");
              var TimeBasedRollingPolicy = Java.type("org.apache.log4j.rolling.TimeBasedRollingPolicy");
              
              // Static variables
              var PATTERN_LAYOUT = new PatternLayout("%d %-5p [%c] (%t;%X{requestURI}) %m%n");
              
              function getLogger(filename, category, level)
              {
                  var logger = _getLogger(category, level);
                  _addAppenderIfNecessary(logger, filename);
                  return _createLoggerObject(logger);
              }
              
              function _getLogger(category, level)
              {
                  var logger = LogManager.getLogger(category);
                  logger.setAdditivity(false);
                  logger.setLevel(Level.toLevel(level));
                  return logger;
              }
              
              function _addAppenderIfNecessary(logger, filename)
              {
                  if (logger.getAppender(filename) == null)
                  {
                      logger.addAppender(_createAppender(filename));
                  }
              }
              
              function _createAppender(filename)
              {
                  var filePattern = AmetysHomeHelper.getAmetysHome() + "/logs/" + filename + "-%d.log";
                  var rollingPolicy = new TimeBasedRollingPolicy();
                  rollingPolicy.setFileNamePattern(filePattern);
                  
                  // Create and configure the appender
                  var fileAppender = new RollingFileAppender();
                  fileAppender.setName(filename);
                  fileAppender.setLayout(PATTERN_LAYOUT);
                  fileAppender.setRollingPolicy(rollingPolicy);
                  fileAppender.activateOptions();
                  return fileAppender;
              }
              
              function _createLoggerObject(logger)
              {
                  function info(message)
                  {
                      print("&lt;span style='color:RoyalBlue'&gt;[INFO] " + message + "&lt;/span&gt;");
                      logger.info(message);
                  }
                  
                  function warn(message)
                  {
                      print("&lt;span style='color:DarkOrange'&gt;[WARN] " + message + "&lt;/span&gt;");
                      logger.warn(message);
                  }
                  
                  function error(message, exception)
                  {
                      print("&lt;span style='color:Crimson'&gt;[ERROR] " + message + "&lt;/span&gt;");
                      if (exception === undefined)
                      {
                          logger.error(message);
                      }
                      else
                      {
                          logger.error(message, exception);
                      }
                  }
                  
                  return {
                      info: info,
                      warn: warn,
                      error: error
                  };
              }
          
              return getLogger;
          })();
              </script>
          </function>

          With this help:

              <message key="PLUGINS_RUNTIME_SCRIPT_FCT_GET_LOGGER">récupération d'un logger pour pouvoir écrire dans la console et dans un fichier de log séparé ou existant.
              &lt;br/&gt;Exemple d'utilisation : &lt;br/&gt;
              &lt;i&gt;
                  var logger = getLogger("script-test", "my.category", "info");&lt;br/&gt;
                  logger.info("Message d'information");&lt;br/&gt;
                  logger.warn("Message d'alerte");&lt;br/&gt;
                  logger.error("Message d'erreur sans exception");&lt;br/&gt;
                  try&lt;br/&gt;
                  \{&lt;br/&gt;
                  &amp;emsp;[...]&lt;br/&gt;
                  }&lt;br/&gt;
                  catch (e)&lt;br/&gt;
                  \{&lt;br/&gt;
                  &amp;emsp;logger.error("Message d'erreur avec exception", e);&lt;br/&gt;
                  }&lt;br/&gt;
              &lt;/i&gt;
              </message>

          Use it like this:

            var logger = getLogger("script-test", "my.category", "info");
            logger.info("Je suis une information");
            logger.warn("Je suis un avertissement");
            logger.error("Je teste une erreur sans exception");
            try
            {
              throw new org.ametys.plugins.repository.AmetysRepositoryException("Bad thing!");
            }
            catch (e)
            {
              logger.error("... et avec une exception", e);
            }

          Bérénice Maurel added a comment - - edited <?xml version= "1.0" encoding= "UTF-8" ?> <function class= "org.ametys.plugins.core.ui.script.StaticConfigurableScriptBinding" > <descriptions> <description> <name>getLogger</name> <text i18n= " true " >PLUGINS_RUNTIME_SCRIPT_FCT_GET_LOGGER</text> </description> </descriptions> <script> var getLogger = (function() { // Imports var LogManager = Java.type( "org.apache.log4j.LogManager" ); var Level = Java.type( "org.apache.log4j.Level" ); var AmetysHomeHelper = Java.type( "org.ametys.runtime.util.AmetysHomeHelper" ); var PatternLayout = Java.type( "org.apache.log4j.PatternLayout" ); var RollingFileAppender = Java.type( "org.apache.log4j.rolling.RollingFileAppender" ); var TimeBasedRollingPolicy = Java.type( "org.apache.log4j.rolling.TimeBasedRollingPolicy" ); // Static variables var PATTERN_LAYOUT = new PatternLayout( "%d %-5p [%c] (%t;%X{requestURI}) %m%n" ); function getLogger(filename, category, level) { var logger = _getLogger(category, level); _addAppenderIfNecessary(logger, filename); return _createLoggerObject(logger); } function _getLogger(category, level) { var logger = LogManager.getLogger(category); logger.setAdditivity( false ); logger.setLevel(Level.toLevel(level)); return logger; } function _addAppenderIfNecessary(logger, filename) { if (logger.getAppender(filename) == null ) { logger.addAppender(_createAppender(filename)); } } function _createAppender(filename) { var filePattern = AmetysHomeHelper.getAmetysHome() + "/logs/" + filename + "-%d.log" ; var rollingPolicy = new TimeBasedRollingPolicy(); rollingPolicy.setFileNamePattern(filePattern); // Create and configure the appender var fileAppender = new RollingFileAppender(); fileAppender.setName(filename); fileAppender.setLayout(PATTERN_LAYOUT); fileAppender.setRollingPolicy(rollingPolicy); fileAppender.activateOptions(); return fileAppender; } function _createLoggerObject(logger) { function info(message) { print( "&lt;span style= 'color:RoyalBlue' &gt;[INFO] " + message + "&lt;/span&gt;" ); logger.info(message); } function warn(message) { print( "&lt;span style= 'color:DarkOrange' &gt;[WARN] " + message + "&lt;/span&gt;" ); logger.warn(message); } function error(message, exception) { print( "&lt;span style= 'color:Crimson' &gt;[ERROR] " + message + "&lt;/span&gt;" ); if (exception === undefined) { logger.error(message); } else { logger.error(message, exception); } } return { info: info, warn: warn, error: error }; } return getLogger; })(); </script> </function> With this help: <message key= "PLUGINS_RUNTIME_SCRIPT_FCT_GET_LOGGER" >récupération d'un logger pour pouvoir écrire dans la console et dans un fichier de log séparé ou existant. &lt;br/&gt;Exemple d'utilisation : &lt;br/&gt; &lt;i&gt; var logger = getLogger( "script-test" , "my.category" , "info" );&lt;br/&gt; logger.info( "Message d'information" );&lt;br/&gt; logger.warn( "Message d'alerte" );&lt;br/&gt; logger.error( "Message d'erreur sans exception" );&lt;br/&gt; try &lt;br/&gt; \{&lt;br/&gt; &amp;emsp;[...]&lt;br/&gt; }&lt;br/&gt; catch (e)&lt;br/&gt; \{&lt;br/&gt; &amp;emsp;logger.error( "Message d'erreur avec exception" , e);&lt;br/&gt; }&lt;br/&gt; &lt;/i&gt; </message> Use it like this: var logger = getLogger( "script-test" , "my.category" , "info" ); logger.info( "Je suis une information" ); logger.warn( "Je suis un avertissement" ); logger.error( "Je teste une erreur sans exception" ); try { throw new org.ametys.plugins.repository.AmetysRepositoryException( "Bad thing!" ); } catch (e) { logger.error( "... et avec une exception" , e); }

          Sure, it was developped quickly because of multiple disconnections during scripts. I don't think it's perfect.

          Bérénice Maurel added a comment - Sure, it was developped quickly because of multiple disconnections during scripts. I don't think it's perfect.

          Raphaël Franchet added a comment - - edited

          I would prefer that category and filename have differents parameters

          createNewLogFile("script", "script.update.process", "info");

          Also, the filename have to include the date to be easily displayed in the logger tools
          (or use the RollingFileAppender)

          Raphaël Franchet added a comment - - edited I would prefer that category and filename have differents parameters createNewLogFile("script", "script.update.process", "info"); Also, the filename have to include the date to be easily displayed in the logger tools (or use the RollingFileAppender)

            Unassigned Unassigned
            bmaurel Bérénice Maurel
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: