少年修仙传客户端基础资源
hch
2024-04-01 d01413b00ef631ac20347716b23818b0b811f65f
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
 * \file
 * Simplistic simulation of a syslog logger for Windows
 *
 * This module contains the Windows syslog logger interface
 *
 * Author:
 *    Neale Ferguson <neale@sinenomine.net>
 *
 */
#include <config.h>
 
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
 
#ifdef HOST_WIN32
 
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <glib.h>
#include <errno.h>
#include <time.h>
#include <process.h>
#include "mono-logger-internals.h"
#include "mono-proclib.h"
 
static FILE *logFile = NULL;
static void *logUserData = NULL;
static wchar_t *logFileName = L".//mono.log";
 
/**
 * mapSyslogLevel:
 *     
 *     @level - GLogLevelFlags value
 *     @returns The equivalent character identifier
 */
static inline char 
mapLogFileLevel(GLogLevelFlags level) 
{
    if (level & G_LOG_LEVEL_ERROR)
        return ('E');
    if (level & G_LOG_LEVEL_CRITICAL)
        return ('C');
    if (level & G_LOG_LEVEL_WARNING)
        return ('W');
    if (level & G_LOG_LEVEL_MESSAGE)
        return ('N');
    if (level & G_LOG_LEVEL_INFO)
        return ('I');
    if (level & G_LOG_LEVEL_DEBUG)
        return ('D');
    return ('I');
}
 
/**
 * mono_log_open_syslog:
 * \param ident Identifier: ignored
 * \param userData Not used
 * Open the syslog file. If the open fails issue a warning and 
 * use stdout as the log file destination.
 */
void
mono_log_open_syslog(const char *ident, void *userData)
{
    logFile = _wfopen(logFileName, L"w");
    if (logFile == NULL) {
        g_warning("opening of log file %s failed with %s",
              strerror(errno));
        logFile = stdout;
    }
    logUserData = userData;
}
 
/**
 * mono_log_write_syslog
 * \param domain Identifier string
 * \param level Logging level flags
 * \param format \c printf format string
 * \param vargs Variable argument list
 * Write data to the syslog file.
 */
void
mono_log_write_syslog(const char *domain, GLogLevelFlags level, mono_bool hdr, const char *message)
{
    time_t t;
    int pid;
    char logTime [80];
 
    if (logFile == NULL)
        logFile = stdout;
 
    struct tm *tod;
    time(&t);
    tod = localtime(&t);
    pid = mono_process_current_pid ();
    strftime(logTime, sizeof(logTime), "%F %T", tod);
 
    fprintf (logFile, "%s level[%c] mono[%d]: %s\n", logTime, mapLogFileLevel (level), pid, message);
 
    fflush(logFile);
 
    if (level & G_LOG_LEVEL_ERROR)
        abort();
}
 
/**
 * mono_log_close_syslog
 *
 *     Close the syslog file
 */
void
mono_log_close_syslog()
{
    if (logFile) {
        fclose(logFile);
        logFile = NULL;
    }
}
#endif