You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2003/11/01 15:45:26 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_logger_file.c

mturk       2003/11/01 06:45:26

  Modified:    jk/native2/common jk_logger_file.c
  Log:
  Use the apr file_io for logging.
  
  Revision  Changes    Path
  1.42      +88 -100   jakarta-tomcat-connectors/jk/native2/common/jk_logger_file.c
  
  Index: jk_logger_file.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_logger_file.c,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- jk_logger_file.c	30 Oct 2003 20:08:36 -0000	1.41
  +++ jk_logger_file.c	1 Nov 2003 14:45:26 -0000	1.42
  @@ -89,40 +89,34 @@
   
   static const char * jk2_logger_file_logFmt = JK_TIME_FORMAT;
   
  -static void jk2_logger_file_setTimeStr(jk_env_t *env,char * str, int len)
  +static void jk2_logger_file_setTimeStr(jk_env_t *env, char *str, int len)
   {
  -    time_t      t = time(NULL);
  -    struct tm   *tms;
  +    apr_time_exp_t gmt;
  +    apr_size_t     l;
   
  -    tms = gmtime(&t);
  -
  -    if( tms==NULL ) {
  -        return;
  -    }
  -
  -    strftime(str, len, jk2_logger_file_logFmt, tms);
  +    apr_time_exp_gmt(&gmt, apr_time_now());
  +    apr_strftime(str, &l, len, jk2_logger_file_logFmt, &gmt);
   }
   
  -static int JK_METHOD jk2_logger_file_log(jk_env_t *env,jk_logger_t *l,                                 
  +static int JK_METHOD jk2_logger_file_log(jk_env_t *env, jk_logger_t *l,                                 
                                  int level,
                                  const char *what)
   {
  -    FILE *f = (FILE *)l->logger_private;
  +    apr_status_t rv = APR_SUCCESS;
  +    apr_file_t *f = (apr_file_t *)l->logger_private;
   
  -    if( f==NULL ) {
  +    if (f == NULL) {
           /* This is usefull to debug what happens before logger is set.
              On apache you need -X option ( no detach, single process ) */
  -        if( what != NULL ) fprintf(stderr, what );
  +        if (what != NULL)
  +            fprintf(stderr, what);
           return JK_OK;
       }
       if(l && l->level <= level && l->logger_private && what) {       
  -        unsigned sz = strlen(what);
  -        if(sz) {
  -            fwrite(what, 1, sz, f);
  -            /* [V] Flush the dam' thing! */
  -            fflush(f);
  -        }
  -
  +        rv = apr_file_puts(what, f);
  +        /* flush the log for each entry only for debug level */
  +        if (rv == APR_SUCCESS && l->level == JK_LOG_DEBUG_LEVEL)
  +            rv = apr_file_flush(f);
           return JK_OK;
       }
   
  @@ -131,73 +125,72 @@
   
   int jk2_logger_file_parseLogLevel(jk_env_t *env, const char *level)
   {
  -    if( level == NULL ) return JK_LOG_INFO_LEVEL;
  +    if (!level)
  +        return JK_LOG_INFO_LEVEL;
       
  -    if(0 == strcasecmp(level, JK_LOG_INFO_VERB)) {
  +    if (!strcasecmp(level, JK_LOG_INFO_VERB))
           return JK_LOG_INFO_LEVEL;
  -    }
   
  -    if(0 == strcasecmp(level, JK_LOG_ERROR_VERB)) {
  +    if (!strcasecmp(level, JK_LOG_ERROR_VERB))
           return JK_LOG_ERROR_LEVEL;
  -    }
   
  -    if(0 == strcasecmp(level, JK_LOG_EMERG_VERB)) {
  +    if (!strcasecmp(level, JK_LOG_EMERG_VERB))
           return JK_LOG_EMERG_LEVEL;
  -    }
   
       return JK_LOG_DEBUG_LEVEL;
   }
   
  -static int JK_METHOD jk2_logger_file_init(jk_env_t *env,jk_logger_t *_this )
  +static int JK_METHOD jk2_logger_file_init(jk_env_t *env, jk_logger_t *_this )
   {
  -    FILE *oldF=(FILE *)_this->logger_private;
  -    FILE *f=NULL;
  -    jk_workerEnv_t *workerEnv=env->getByName( env, "workerEnv" );
  -    if( _this->name==NULL ) {
  +    apr_status_t rv;
  +    apr_file_t *oldF = (apr_file_t *)_this->logger_private;
  +
  +    apr_file_t *f = NULL;
  +    jk_workerEnv_t *workerEnv = env->getByName(env, "workerEnv");
  +    if (!_this->name) {
           _this->name="${serverRoot}/logs/jk2.log";
       }
       _this->name = jk2_config_replaceProperties(env, workerEnv->initData,
                                                  _this->mbean->pool, _this->name);
  -    if( !_this->name || strcmp( "stderr", _this->name )==0 ) {
  -        _this->logger_private = stderr;
  -    } else {
  -    
  -#ifdef AS400
  -        f = fopen(_this->name, "a+, o_ccsid=0");
  -#else
  -        f = fopen(_this->name, "a+");
  -#endif        
  -        
  -        if(f==NULL) {
  +    if (!_this->name || !strcmp("stderr", _this->name)) {
  +         if ((rv = apr_file_open_stderr(&f, env->globalPool->_private)) !=
  +                                        APR_SUCCESS) {
  +            _this->jkLog(env, _this,JK_LOG_ERROR,
  +                         "Can't open stderr file\n");
  +            return JK_ERR;
  +        }
  +        _this->logger_private = f;
  +    } 
  +    else {
  +        if ((rv = apr_file_open(&f, _this->name,  
  +                                APR_APPEND | APR_READ | APR_WRITE | APR_CREATE,
  +                                APR_OS_DEFAULT,
  +                                env->globalPool->_private)) != APR_SUCCESS) {
               _this->jkLog(env, _this,JK_LOG_ERROR,
                            "Can't open log file %s\n", _this->name );
               return JK_ERR;
           }
  -#if defined(F_SETFD) && defined(FD_CLOEXEC)
  -        /* Protect the log file
  -         * so that it will not be inherited by child processes
  -         */
  -        fcntl(fileno(f), F_SETFD, FD_CLOEXEC);
  -#endif
           _this->logger_private = f;
       } 
       _this->jkLog(env, _this,JK_LOG_INFO,
                    "Initializing log file %s\n", _this->name );
  -    if( oldF!=NULL && oldF != stderr) {
  -        fclose( oldF );
  +    if (oldF) {
  +        apr_file_close(oldF);
       }
       return JK_OK;
   }
   
   static int jk2_logger_file_close(jk_env_t *env,jk_logger_t *_this)
   {
  -    FILE *f = _this->logger_private;
  -    if (f == NULL || f != stderr)
  +    apr_status_t rv;
  +    apr_file_t *f = _this->logger_private;
  +    
  +    if (!f)
           return JK_OK;
       
  -    fflush(f);
  -    fclose(f);
  -    _this->logger_private=NULL;
  +    apr_file_flush(f);
  +    rv = apr_file_close(f);
  +    _this->logger_private = NULL;
   
       /*     free(_this); */
       return JK_OK;
  @@ -207,22 +200,22 @@
   jk2_logger_file_setProperty(jk_env_t *env, jk_bean_t *mbean, 
                               char *name,  void *valueP )
   {
  -    jk_logger_t *_this=mbean->object;
  -    char *value=valueP;
  -    if( strcmp( name, "name" )==0 ) {
  -        _this->name=(char *)value;
  -    } else if( strcmp( name, "file" )==0 ) {
  -        _this->name=(char *)value;
  +    jk_logger_t *_this = mbean->object;
  +    char *value = valueP;
  +    if (!strcmp(name, "name"))
  +        _this->name = (char *)value;
  +    else if (!strcmp(name, "file")) {
  +        _this->name = (char *)value;
           /* Set the file imediately */
  -        jk2_logger_file_init(env, (jk_logger_t *)mbean->object );
  -
  -    } else if( strcmp( name, "timeFormat" )==0 ) {
  +        jk2_logger_file_init(env, (jk_logger_t *)mbean->object);
  +    } 
  +    else if (!strcmp(name, "timeFormat"))
           jk2_logger_file_logFmt = value;
  -    } else if( strcmp( name, "level" )==0 ) {
  +    else if (!strcmp(name, "level")) {
           _this->level = jk2_logger_file_parseLogLevel(env, value);
  -        if( _this->level == 0 ) {
  -            _this->jkLog( env, _this, JK_LOG_INFO,
  -                          "Level %s %d \n", value, _this->level );
  +        if( _this->level == 0) {
  +            _this->jkLog(env, _this, JK_LOG_INFO,
  +                         "Level %s %d \n", value, _this->level);
           }
       }
       return JK_OK;
  @@ -238,48 +231,44 @@
       int rc = 0;
       char *buf;
       char *fmt1;
  -    apr_pool_t *aprPool=env->tmpPool->_private;
  +    apr_pool_t *aprPool = env->tmpPool->_private;
       char rfctime[APR_RFC822_DATE_LEN];
       apr_time_t time = apr_time_now();
       
  -    if( !file || !args) {
  +    if (!file || !args)
           return -1;
  -    }
   
  -    if(l->logger_private==NULL ||
  -       l->level <= level) {
  +
  +    if (l->logger_private == NULL ||
  +        l->level <= level) {
           char *f = (char *)(file + strlen(file) - 1);
           char *slevel;
           switch (level){
  -            case JK_LOG_INFO_LEVEL : 
  -                slevel=JK_LOG_INFO_VERB;
  +            case JK_LOG_INFO_LEVEL:
  +                slevel = JK_LOG_INFO_VERB;
                   break;
  -            case JK_LOG_ERROR_LEVEL : 
  -                slevel=JK_LOG_ERROR_VERB;
  +            case JK_LOG_ERROR_LEVEL:
  +                slevel = JK_LOG_ERROR_VERB;
                   break;
  -            case JK_LOG_EMERG_LEVEL : 
  -                slevel=JK_LOG_EMERG_VERB;
  +            case JK_LOG_EMERG_LEVEL:
  +                slevel = JK_LOG_EMERG_VERB;
                   break;
  -            case JK_LOG_DEBUG_LEVEL : 
  +            case JK_LOG_DEBUG_LEVEL:
               default:
  -                slevel=JK_LOG_DEBUG_VERB;
  +                slevel = JK_LOG_DEBUG_VERB;
                   break;
  -
           }
  -        while(f != file && '\\' != *f && '/' != *f) {
  +        while (f != file && *f != '\\' && *f != '/')
               f--;
  -        }
  -        if(f != file) {
  -            f++;
  -        }
  +        if (f != file)
  +            ++f;
           
           /* XXX rfc822_date or apr_ctime ? */
  -        apr_ctime( rfctime, time );
  -        fmt1=apr_psprintf( aprPool, "[%s] (%5s ) [%s (%d)]  %s", rfctime, slevel, f, line, fmt );
  -        buf=apr_pvsprintf( aprPool, fmt1, args );
  +        apr_ctime(rfctime, time);
  +        fmt1 = apr_psprintf(aprPool, "[%s] (%5s ) [%s (%d)]  %s", rfctime, slevel, f, line, fmt);
  +        buf = apr_pvsprintf(aprPool, fmt1, args);
   
  -        l->log(env, l, level, buf);
  -        
  +        l->log(env, l, level, buf);        
       }
       
       return rc;
  @@ -296,7 +285,7 @@
       int rc;
       
       va_start(args, fmt);
  -    rc=jk2_logger_file_jkVLog( env, l, file, line, level, fmt, args );
  +    rc = jk2_logger_file_jkVLog(env, l, file, line, level, fmt, args);
       va_end(args);
   
       return rc;
  @@ -308,7 +297,7 @@
   {
       jk_logger_t *log = (jk_logger_t *)pool->calloc(env, pool, sizeof(jk_logger_t));
   
  -    if(log==NULL ) {
  +    if (log == NULL) {
           fprintf(stderr, "loggerFile.factory(): OutOfMemoryException\n"); 
           return JK_ERR;
       }
  @@ -318,14 +307,13 @@
       log->init =jk2_logger_file_init;
       log->jkLog = jk2_logger_file_jkLog;
       log->jkVLog = jk2_logger_file_jkVLog;
  -    log->level=JK_LOG_ERROR_LEVEL;
  +    log->level = JK_LOG_ERROR_LEVEL;
       jk2_logger_file_logFmt = JK_TIME_FORMAT;
       
  -    result->object=log;
  -    log->mbean=result;
  +    result->object = log;
  +    log->mbean = result;
       
       result->setAttribute = jk2_logger_file_setProperty;
   
       return JK_OK;
   }
  -
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org