Revision eeacee4d qemu-log.c

b/qemu-log.c
25 25
#else
26 26
static const char *logfilename = "/tmp/qemu.log";
27 27
#endif
28
FILE *logfile;
29
int loglevel;
28
FILE *qemu_logfile;
29
int qemu_loglevel;
30 30
static int log_append = 0;
31 31

  
32
void qemu_log(const char *fmt, ...)
33
{
34
    va_list ap;
35

  
36
    va_start(ap, fmt);
37
    if (qemu_logfile) {
38
        vfprintf(qemu_logfile, fmt, ap);
39
    }
40
    va_end(ap);
41
}
42

  
43
void qemu_log_mask(int mask, const char *fmt, ...)
44
{
45
    va_list ap;
46

  
47
    va_start(ap, fmt);
48
    if ((qemu_loglevel & mask) && qemu_logfile) {
49
        vfprintf(qemu_logfile, fmt, ap);
50
    }
51
    va_end(ap);
52
}
53

  
32 54
/* enable or disable low levels log */
33 55
void cpu_set_log(int log_flags)
34 56
{
35
    loglevel = log_flags;
36
    if (loglevel && !logfile) {
37
        logfile = fopen(logfilename, log_append ? "a" : "w");
38
        if (!logfile) {
57
    qemu_loglevel = log_flags;
58
    if (qemu_loglevel && !qemu_logfile) {
59
        qemu_logfile = fopen(logfilename, log_append ? "a" : "w");
60
        if (!qemu_logfile) {
39 61
            perror(logfilename);
40 62
            _exit(1);
41 63
        }
......
43 65
        /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
44 66
        {
45 67
            static char logfile_buf[4096];
46
            setvbuf(logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));
68
            setvbuf(qemu_logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));
47 69
        }
48 70
#elif defined(_WIN32)
49 71
        /* Win32 doesn't support line-buffering, so use unbuffered output. */
50
        setvbuf(logfile, NULL, _IONBF, 0);
72
        setvbuf(qemu_logfile, NULL, _IONBF, 0);
51 73
#else
52
        setvbuf(logfile, NULL, _IOLBF, 0);
74
        setvbuf(qemu_logfile, NULL, _IOLBF, 0);
53 75
#endif
54 76
        log_append = 1;
55 77
    }
56
    if (!loglevel && logfile) {
57
        fclose(logfile);
58
        logfile = NULL;
78
    if (!qemu_loglevel && qemu_logfile) {
79
        fclose(qemu_logfile);
80
        qemu_logfile = NULL;
59 81
    }
60 82
}
61 83

  
62 84
void cpu_set_log_filename(const char *filename)
63 85
{
64 86
    logfilename = strdup(filename);
65
    if (logfile) {
66
        fclose(logfile);
67
        logfile = NULL;
87
    if (qemu_logfile) {
88
        fclose(qemu_logfile);
89
        qemu_logfile = NULL;
68 90
    }
69
    cpu_set_log(loglevel);
91
    cpu_set_log(qemu_loglevel);
70 92
}
71 93

  
72 94
const CPULogItem cpu_log_items[] = {

Also available in: Unified diff