Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /trunk/TTProxy/Logger.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3226 by maya, Tue Mar 24 09:37:20 2009 UTC revision 3227 by maya, Tue Mar 24 15:10:33 2009 UTC
# Line 1  Line 1 
1  #ifndef _YEBISOCKS_LOGGER_H_  #ifndef _YEBISOCKS_LOGGER_H_
2  #define _YEBISOCKS_LOGGER_H_  #define _YEBISOCKS_LOGGER_H_
3    
4  #include <YCL/String.h>  #include <YCL/String.h>
5  using namespace yebisuya;  using namespace yebisuya;
6    
7  class Logger {  class Logger {
8  private:  private:
9          HANDLE logfile;          HANDLE logfile;
10          Logger():logfile(INVALID_HANDLE_VALUE) {          Logger():logfile(INVALID_HANDLE_VALUE) {
11          }          }
12  public:  public:
13          ~Logger() {          ~Logger() {
14                  if (logfile != INVALID_HANDLE_VALUE) {                  if (logfile != INVALID_HANDLE_VALUE) {
15                          ::CloseHandle(logfile);                          ::CloseHandle(logfile);
16                          logfile = INVALID_HANDLE_VALUE;                          logfile = INVALID_HANDLE_VALUE;
17                  }                  }
18          }          }
19  private:  private:
20          static Logger& instance() {          static Logger& instance() {
21                  static Logger instance;                  static Logger instance;
22                  return instance;                  return instance;
23          }          }
24          void debuglog_string(const char* label, const char* data) {          void debuglog_string(const char* label, const char* data) {
25                  if (logfile != INVALID_HANDLE_VALUE) {                  if (logfile != INVALID_HANDLE_VALUE) {
26                          DWORD written;                          DWORD written;
27                          const char* start = data;                          const char* start = data;
28                          WriteFile(logfile, label, strlen(label), &written, NULL);                          WriteFile(logfile, label, strlen(label), &written, NULL);
29                          WriteFile(logfile, ": \"", 3, &written, NULL);                          WriteFile(logfile, ": \"", 3, &written, NULL);
30                          while (*data != '\0') {                          while (*data != '\0') {
31                                  char escaped[2] = {'\\'};                                  char escaped[2] = {'\\'};
32                                  switch (*data) {                                  switch (*data) {
33                                  case '\n':                                  case '\n':
34                                          escaped[1] = 'n';                                          escaped[1] = 'n';
35                                          break;                                          break;
36                                  case '\r':                                  case '\r':
37                                          escaped[1] = 'r';                                          escaped[1] = 'r';
38                                          break;                                          break;
39                                  case '\t':                                  case '\t':
40                                          escaped[1] = 't';                                          escaped[1] = 't';
41                                          break;                                          break;
42                                  case '\\':                                  case '\\':
43                                          escaped[1] = '\\';                                          escaped[1] = '\\';
44                                          break;                                          break;
45                                  case '\"':                                  case '\"':
46                                          escaped[1] = '\"';                                          escaped[1] = '\"';
47                                          break;                                          break;
48                                  }                                  }
49                                  if (escaped[1] != '\0') {                                  if (escaped[1] != '\0') {
50                                          if (start < data) {                                          if (start < data) {
51                                                  WriteFile(logfile, start, data - start, &written, NULL);                                                  WriteFile(logfile, start, data - start, &written, NULL);
52                                          }                                          }
53                                          WriteFile(logfile, escaped, 2, &written, NULL);                                          WriteFile(logfile, escaped, 2, &written, NULL);
54                                          start = data + 1;                                          start = data + 1;
55                                  }                                  }
56                                  data++;                                  data++;
57                          }                          }
58                          if (start < data) {                          if (start < data) {
59                                  WriteFile(logfile, start, data - start, &written, NULL);                                  WriteFile(logfile, start, data - start, &written, NULL);
60                          }                          }
61                          WriteFile(logfile, "\"\r\n", 3, &written, NULL);                          WriteFile(logfile, "\"\r\n", 3, &written, NULL);
62                  }                  }
63          }          }
64    
65          void debuglog_binary(const char* label, const unsigned char* data, int size) {          void debuglog_binary(const char* label, const unsigned char* data, int size) {
66                  if (logfile != INVALID_HANDLE_VALUE) {                  if (logfile != INVALID_HANDLE_VALUE) {
67                          DWORD written;                          DWORD written;
68                          char buf[16];                          char buf[16];
69                          int len;                          int len;
70                          WriteFile(logfile, label, strlen(label), &written, NULL);                          WriteFile(logfile, label, strlen(label), &written, NULL);
71                          WriteFile(logfile, ": [", 3, &written, NULL);                          WriteFile(logfile, ": [", 3, &written, NULL);
72                          while (size-- > 0) {                          while (size-- > 0) {
73                                  len = wsprintf(buf, " %02x", *data++);                                  len = wsprintf(buf, " %02x", *data++);
74                                  WriteFile(logfile, buf, 3, &written, NULL);                                  WriteFile(logfile, buf, 3, &written, NULL);
75                          }                          }
76                          WriteFile(logfile, " ]\r\n", 4, &written, NULL);                          WriteFile(logfile, " ]\r\n", 4, &written, NULL);
77                  }                  }
78          }          }
79    
80  public:  public:
81          static void open(String filename) {          static void open(String filename) {
82                  close();                  close();
83                  if (filename != NULL) {                  if (filename != NULL) {
84                          HANDLE logfile = ::CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);                          HANDLE logfile = ::CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
85                          if (logfile != INVALID_HANDLE_VALUE) {                          if (logfile != INVALID_HANDLE_VALUE) {
86                                  ::SetFilePointer(logfile, 0, NULL, FILE_END);                                  ::SetFilePointer(logfile, 0, NULL, FILE_END);
87                                  instance().logfile = logfile;                                  instance().logfile = logfile;
88                          }                          }
89                  }                  }
90          }          }
91          static void close() {          static void close() {
92                  if (instance().logfile != INVALID_HANDLE_VALUE) {                  if (instance().logfile != INVALID_HANDLE_VALUE) {
93                          ::CloseHandle(instance().logfile);                          ::CloseHandle(instance().logfile);
94                          instance().logfile = INVALID_HANDLE_VALUE;                          instance().logfile = INVALID_HANDLE_VALUE;
95                  }                  }
96          }          }
97          static void log(const char* label, const char* data) {          static void log(const char* label, const char* data) {
98                  instance().debuglog_string(label, data);                  instance().debuglog_string(label, data);
99          }          }
100          static void log(const char* label, const unsigned char* data, int size) {          static void log(const char* label, const unsigned char* data, int size) {
101                  instance().debuglog_binary(label, data, size);                  instance().debuglog_binary(label, data, size);
102          }          }
103  };  };
104    
105  #endif//_YEBISOCKS_LOGGER_H_  #endif//_YEBISOCKS_LOGGER_H_

Legend:
Removed from v.3226  
changed lines
  Added in v.3227

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26