Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/common/Util/Clooper/log.cpp
blob: d4a8c720ca24432cf29acb39ddbc6baaa073fded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef LOG_HXX
#define LOG_HXX

#include <stdarg.h>
#include <stdio.h>

struct log_t
{
    FILE * _file;
    int _level;
    int _close;

    log_t(const char * logpath, int level = 0) : _file(NULL), _level(level), _close(1)
    {
        _file = fopen(logpath, "w");
        if (!_file)
        {
            fprintf(stderr, "Failed to open log file for writing: %s\n", logpath);
        }
    }
    log_t(FILE * file, int level = 0): _file(file), _level(level), _close(0)
    {
    }
    ~log_t()
    {
        if (_close && _file) fclose(_file);
    }
    void printf( const char * fmt, ... ) __attribute__(( format (printf, 2,3)))
    {
        if (!_file) return;
        va_list ap;
        va_start(ap,fmt);
        ::vfprintf(_file, fmt, ap);
        va_end(ap);
        fflush(_file);
    }
    void printf( int level, const char * fmt, ... ) __attribute__(( format (printf, 3,4)))
    {
        if (level <= _level)
        {
            if (!_file) return;
            fprintf(_file, "L%i:", level);
            va_list ap;
            va_start(ap,fmt);
            ::vfprintf(_file, fmt, ap);
            va_end(ap);
            fflush(_file);
        }
    }
};

#endif