1 //===- Logging.cpp --------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "Logging.h" 10 #include "llvm/Support/Chrono.h" 11 #include "llvm/Support/ManagedStatic.h" 12 #include "llvm/Support/raw_ostream.h" 13 14 using namespace mlir; 15 using namespace mlir::lsp; 16 setLogLevel(Level logLevel)17void Logger::setLogLevel(Level logLevel) { get().logLevel = logLevel; } 18 get()19Logger &Logger::get() { 20 static Logger logger; 21 return logger; 22 } 23 log(Level logLevel,const char * fmt,const llvm::formatv_object_base & message)24void Logger::log(Level logLevel, const char *fmt, 25 const llvm::formatv_object_base &message) { 26 Logger &logger = get(); 27 28 // Ignore messages with log levels below the current setting in the logger. 29 if (logLevel < logger.logLevel) 30 return; 31 32 // An indicator character for each log level. 33 const char *logLevelIndicators = "DIE"; 34 35 // Format the message and print to errs. 36 llvm::sys::TimePoint<> timestamp = std::chrono::system_clock::now(); 37 std::lock_guard<std::mutex> logGuard(logger.mutex); 38 llvm::errs() << llvm::formatv( 39 "{0}[{1:%H:%M:%S.%L}] {2}\n", 40 logLevelIndicators[static_cast<unsigned>(logLevel)], timestamp, message); 41 llvm::errs().flush(); 42 } 43