[ 
https://issues.apache.org/jira/browse/TS-306?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14693848#comment-14693848
 ] 

ASF GitHub Bot commented on TS-306:
-----------------------------------

Github user danobi commented on a diff in the pull request:

    https://github.com/apache/trafficserver/pull/274#discussion_r36885521
  
    --- Diff: lib/ts/BaseLogFile.cc ---
    @@ -0,0 +1,578 @@
    +/** @file
    +
    +  Base class for log files implementation
    +
    +  @section license License
    +
    +  Licensed to the Apache Software Foundation (ASF) under one
    +  or more contributor license agreements.  See the NOTICE file
    +  distributed with this work for additional information
    +  regarding copyright ownership.  The ASF licenses this file
    +  to you under the Apache License, Version 2.0 (the
    +  "License"); you may not use this file except in compliance
    +  with the License.  You may obtain a copy of the License at
    +
    +      http://www.apache.org/licenses/LICENSE-2.0
    +
    +  Unless required by applicable law or agreed to in writing, software
    +  distributed under the License is distributed on an "AS IS" BASIS,
    +  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +  See the License for the specific language governing permissions and
    +  limitations under the License.
    + */
    +
    +#include "BaseLogFile.h"
    +
    +/*
    + * This consturctor creates a BaseLogFile based on a given name.
    + * This is the most common way BaseLogFiles are created.
    + */
    +BaseLogFile::BaseLogFile(const char *name) : m_signature(0), 
m_has_signature(false)
    +{
    +  init(name);
    +  log_log_trace("exiting BaseLogFile constructor, m_name=%s, this=%p\n", 
(char *)m_name, this);
    +}
    +
    +/*
    + * This consturctor creates a BaseLogFile based on a given name.
    + * Similar to above constructor, but is overloaded with the object 
signature
    + */
    +BaseLogFile::BaseLogFile(const char *name, uint64_t sig) : 
m_signature(sig), m_has_signature(true)
    +{
    +  init(name);
    +  log_log_trace("exiting BaseLogFile signature constructor, m_name=%s, 
m_signature=%ld, this=%p\n", (char *)m_name, m_signature,
    +                this);
    +}
    +
    +/*
    + * This copy constructor creates a BaseLogFile based on a given copy.
    + */
    +BaseLogFile::BaseLogFile(const BaseLogFile &copy)
    +  : m_fp(NULL), m_start_time(copy.m_start_time), m_end_time(0L), 
m_bytes_written(0), m_signature(copy.m_signature),
    +    m_has_signature(copy.m_has_signature), 
m_name(ats_strdup(copy.m_name)), m_hostname(ats_strdup(copy.m_hostname)),
    +    m_is_regfile(false), m_is_init(copy.m_is_init), m_meta_info(NULL)
    +{
    +  log_log_trace("exiting BaseLogFile copy constructor, m_name=%s, 
this=%p\n", (char *)m_name, this);
    +}
    +
    +/*
    + * Destructor.
    + */
    +BaseLogFile::~BaseLogFile()
    +{
    +  log_log_trace("entering BaseLogFile destructor, m_name=%s, this=%p\n", 
(char *)m_name, this);
    +
    +  if (m_is_regfile)
    +    close_file();
    +  else
    +    log_log_trace("not a regular file, not closing, m_name=%s, this=%p\n", 
(char *)m_name, this);
    +
    +  log_log_trace("exiting BaseLogFile destructor, this=%p\n", this);
    +}
    +
    +/*
    + * Initializes the defaults of some of the common member values of this 
class
    + */
    +void
    +BaseLogFile::init(const char *name)
    +{
    +  m_fp = NULL;
    +  m_start_time = time(0);
    +  m_end_time = 0L;
    +  m_bytes_written = 0;
    +  m_name = ats_strdup(name);
    +  m_hostname = NULL;
    +  m_is_regfile = false;
    +  m_is_init = false;
    +  m_meta_info = NULL;
    +}
    +
    +/*
    + * This function is called by a client of BaseLogFile to roll the 
underlying
    + * file  The tricky part to this routine is in coming up with the new file 
name,
    + * which contains the bounding timestamp interval for the entries
    + * within the file.
    +
    + * Under normal operating conditions, this BaseLogFile object was in 
existence
    + * for all writes to the file.  In this case, the LogFile members 
m_start_time
    + * and m_end_time will have the starting and ending times for the actual
    + * entries written to the file.
    +
    + * On restart situations, it is possible to re-open an existing 
BaseLogFile,
    + * which means that the m_start_time variable will be later than the actual
    + * entries recorded in the file.  In this case, we'll use the creation time
    + * of the file, which should be recorded in the meta-information located on
    + * disk.
    +
    + * If we can't use the meta-file, either because it's not there or because
    + * it's not valid, then we'll use timestamp 0 (Jan 1, 1970) as the starting
    + * bound.
    +
    + * Return 1 if file rolled, 0 otherwise
    + */
    +int
    +BaseLogFile::roll(long interval_start, long interval_end)
    +{
    +  // First, let's see if a roll is even needed.
    +  if (m_name == NULL || !BaseLogFile::exists((char *)m_name)) {
    +    log_log_trace("Roll not needed for %s; file doesn't exist\n", ((char 
*)m_name) ? (char *)m_name : "no_name\n");
    --- End diff --
    
    Without the casting or the `get()` function, I was seeing compiler warnings 
about non-POD types. I'll change all the casts to `get()` calls instead, unless 
there's a better way to remove the warnings. 


> enable log rotation for diags.log
> ---------------------------------
>
>                 Key: TS-306
>                 URL: https://issues.apache.org/jira/browse/TS-306
>             Project: Traffic Server
>          Issue Type: Improvement
>          Components: Logging
>            Reporter: Miles Libbey
>            Assignee: Daniel Xu
>              Labels: newbie
>             Fix For: 6.1.0
>
>
> (from yahoo bug 913896)
> Original description
> by Leif Hedstrom 3 years ago at 2006-12-04 12:42
> There might be reasons why this file might get filled up, e.g. libraries used 
> by plugins producing output on STDOUT/STDERR. A few suggestions have been
> made, to somehow rotate traffic.out. One possible solution (suggested by 
> Ryan) is to use cronolog (http://cronolog.org/), which seems like a fine idea.
>               
>  
> Comment 1
>  by Joseph Rothrock  2 years ago at 2007-10-17 09:13:24
> Maybe consider rolling diags.log as well. -Feature enhancement.
>               
> Comment 2
>  by Kevin Dalley 13 months ago at 2009-03-04 15:32:18
> When traffic.out gets filled up, error.log stops filing up, even though 
> rotation is turned on. This is
> counter-intuitive.  Rotation does not control traffic.out, but a large 
> traffic.out will stop error.log from being
> written.
>               



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to