• Marco's avatar
    Add support for automatic removal of old logs (#432) · a6f7be14
    Marco authored
    * Add support for automatic removal of old logs
    
    GetOverdueLogNames(string log_directory, int days) will check all
    filenames under log_directory, and return a list of files whose last modified time is
    over the given days (calculated using difftime()).
    
    So that we can easily for unlink all files stored in the returned vector.
    
    * Replaced the lines that require C++11
    
    * embed dirent.h in project
    
    * Add support for automatic removal of old logs
    
    In this commit, at the end of LogFileObject::Write,
    it will perform clean up for old logs.
    
    It uses GetLoggingDirectories() and for each file in each
    directory, it will check if a file is a log file produced by glog.
    If it is, and it is last modified 3 days ago, then it will unlink()
    this file. (It will only remove the project's own log files,
    it won't remove the logs from other projects.)
    
    Currently it is hardcoded to 3 days, I'll see if this can be
    implemented in a more flexible manner.
    
    * Implement old log cleaner
    
    The log cleaner can be enabled and disabled at any given time.
    By default, the log cleaner is disabled.
    
    For example, this will enable the log cleaner and delete
    the log files whose last modified time is >= x days
    google::EnableLogCleaner(x days);
    
    To disable it, simply call
    google::DisableLogCleaner();
    
    Please note that it will only clean up the logs produced for
    its own project, the log files from other project will be untouched.
    
    * logging: log_cleaner: Use blackslash for windows dir delim
    
    * logging: log_cleaner: remove the range-based loops
    
    Also replaced the hardcoded overdue days with the correct variable.
    
    * Add Marco Wang to AUTHORS and CONTRIBUTORS
    
    * logging: log_cleaner: Remove redundant filename stripping
    
    Previously the full path to a file is passed into IsGlogLog(),
    and then std::string::erase() is used to get the filename part.
    If a directory name contains '.', then this function will be unreliable.
    
    Now only the filename it self is passed into IsGlogLog(),
    so this problem will be eradicated.
    
    * logging: log_cleaner: improve readability
    
    * Add google::EnableLogCleaner() to windows logging.h
    
    * logging: log_cleaner: Remove perror message
    
    * logging: IsGlogLog: match filename keyword by keyword
    
    Splitting a filename into tokens by '.' causes problems
    if the executable's filename contains a dot.
    
    Filename should be matched keyword by keyword in the following
    order:
    1. program name
    2. hostname
    3. username
    4. "log"
    a6f7be14
Name
Last commit
Last update
..
glog Loading commit data...
config.h Loading commit data...
dirent.h Loading commit data...
port.cc Loading commit data...
port.h Loading commit data...
preprocess.sh Loading commit data...