Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(398)

Side by Side Diff: chromeos/syslog_logging.cc

Issue 6597120: libchromeos: re-push add process control library, syslog logging capability, and run unit tests (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/common.git@master
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chromeos/syslog_logging.h ('k') | chromeos/test_helpers.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <chromeos/syslog_logging.h>
6
7 #include <string>
8 #include <syslog.h>
9
10 // syslog.h and base/logging.h both try to #define LOG_INFO and LOG_WARNING.
11 // We need to #undef at least these two before including base/logging.h. The
12 // others are included to be consistent.
13 namespace {
14 const int kSyslogInfo = LOG_INFO;
15 const int kSyslogWarning = LOG_WARNING;
16 const int kSyslogError = LOG_ERR;
17 const int kSyslogCritical = LOG_CRIT;
18
19 #undef LOG_INFO
20 #undef LOG_WARNING
21 #undef LOG_ERR
22 #undef LOG_INFO
23 } // namespace
24
25 #include <base/logging.h>
26
27 static std::string s_ident;
28 static std::string s_accumulated;
29 static bool s_accumulate;
30 static bool s_log_to_syslog;
31 static bool s_log_to_stderr;
32
33 static bool HandleMessage(int severity, const std::string &message) {
34 switch (severity) {
35 case logging::LOG_INFO:
36 severity = kSyslogInfo;
37 break;
38
39 case logging::LOG_WARNING:
40 severity = kSyslogWarning;
41 break;
42
43 case logging::LOG_ERROR:
44 case logging::LOG_ERROR_REPORT:
45 severity = kSyslogError;
46 break;
47
48 case logging::LOG_FATAL:
49 severity = kSyslogCritical;
50 break;
51 }
52
53 // The first "] " should be the end of the header added by the logging
54 // code. The meat of the message is two characters after that.
55 size_t pos = message.find("] ");
56 if (pos != std::string::npos && message.length() > pos + 2) {
57 pos += 2;
58 } else {
59 pos = 0;
60 }
61
62 const char* str = message.c_str() + pos;
63
64 if (s_log_to_syslog)
65 syslog(severity, "%s", str);
66 if (s_accumulate)
67 s_accumulated.append(str);
68 return !s_log_to_stderr;
69 }
70
71 namespace chromeos {
72 void InitLog(int init_flags) {
73 logging::InitLogging("/dev/null",
74 logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG,
75 logging::DONT_LOCK_LOG_FILE,
76 logging::APPEND_TO_OLD_LOG_FILE);
77 logging::SetLogMessageHandler(HandleMessage);
78 s_log_to_syslog = (init_flags & kLogToSyslog) != 0;
79 s_log_to_stderr = (init_flags & kLogToStderr) != 0;
80 }
81 void OpenLog(const char* ident, bool log_pid) {
82 s_ident = ident;
83 openlog(s_ident.c_str(), log_pid ? LOG_PID : 0, LOG_USER);
84 }
85 void LogToString(bool enabled) {
86 s_accumulate = enabled;
87 }
88 std::string GetLog() {
89 return s_accumulated;
90 }
91 void ClearLog() {
92 s_accumulated.clear();
93 }
94 bool FindLog(const char* string) {
95 return s_accumulated.find(string) != std::string::npos;
96 }
97 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/syslog_logging.h ('k') | chromeos/test_helpers.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698