/* * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/* Default logger (Logger::defaultLogger()) writes log messages to * the default log file. * Common scenario: * - main() function configures default logger: * FileLogAppender appender(_T("my_log_filename.log")); * Logger::defaultLogger().setAppender(appender); * Logger::defaultLogger().setLogLevel(LOG_INFO); * If the default file name and log level are not set, * _T("jusched.log")/LOG_TRACE are used. * * Logger fileName specifies only file name, * full path for the log file depends on the platform * (usually value of the TMP env. var)
*/
class Logger; class StreamLogAppender;
struct LogEvent: public PlatformLogEvent {
tstring logLevel;
tstring fileName; int lineNum;
tstring funcName;
tstring message;
class NopLogAppender: public LogAppender { public: virtualvoid append(const LogEvent& v) {};
};
class TeeLogAppender: public LogAppender { public:
TeeLogAppender(LogAppender* first, LogAppender* second):
first(first), second(second) {
} virtual ~TeeLogAppender() {
} virtualvoid append(const LogEvent& v) { if (first) {
first->append(v);
} if (second) {
second->append(v);
}
} private:
LogAppender* first;
LogAppender* second;
};
/** * Writes log events to the given std::ostream. * Supposed to be used with std::cout or std::cerr
*/ class StreamLogAppender: public LogAppender { public: explicit StreamLogAppender(std::ostream& consumer) : consumer(&consumer) {
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.