17bc52733SRiver Riddle //===- Logging.cpp --------------------------------------------------------===// 27bc52733SRiver Riddle // 37bc52733SRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47bc52733SRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 57bc52733SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67bc52733SRiver Riddle // 77bc52733SRiver Riddle //===----------------------------------------------------------------------===// 87bc52733SRiver Riddle 9*305d7185SRiver Riddle #include "mlir/Tools/lsp-server-support/Logging.h" 107bc52733SRiver Riddle #include "llvm/Support/Chrono.h" 117bc52733SRiver Riddle #include "llvm/Support/ManagedStatic.h" 127bc52733SRiver Riddle #include "llvm/Support/raw_ostream.h" 137bc52733SRiver Riddle 147bc52733SRiver Riddle using namespace mlir; 157bc52733SRiver Riddle using namespace mlir::lsp; 167bc52733SRiver Riddle setLogLevel(Level logLevel)177bc52733SRiver Riddlevoid Logger::setLogLevel(Level logLevel) { get().logLevel = logLevel; } 187bc52733SRiver Riddle get()197bc52733SRiver RiddleLogger &Logger::get() { 207bc52733SRiver Riddle static Logger logger; 217bc52733SRiver Riddle return logger; 227bc52733SRiver Riddle } 237bc52733SRiver Riddle log(Level logLevel,const char * fmt,const llvm::formatv_object_base & message)247bc52733SRiver Riddlevoid Logger::log(Level logLevel, const char *fmt, 257bc52733SRiver Riddle const llvm::formatv_object_base &message) { 267bc52733SRiver Riddle Logger &logger = get(); 277bc52733SRiver Riddle 287bc52733SRiver Riddle // Ignore messages with log levels below the current setting in the logger. 297bc52733SRiver Riddle if (logLevel < logger.logLevel) 307bc52733SRiver Riddle return; 317bc52733SRiver Riddle 327bc52733SRiver Riddle // An indicator character for each log level. 337bc52733SRiver Riddle const char *logLevelIndicators = "DIE"; 347bc52733SRiver Riddle 357bc52733SRiver Riddle // Format the message and print to errs. 367bc52733SRiver Riddle llvm::sys::TimePoint<> timestamp = std::chrono::system_clock::now(); 377bc52733SRiver Riddle std::lock_guard<std::mutex> logGuard(logger.mutex); 387bc52733SRiver Riddle llvm::errs() << llvm::formatv( 397bc52733SRiver Riddle "{0}[{1:%H:%M:%S.%L}] {2}\n", 407bc52733SRiver Riddle logLevelIndicators[static_cast<unsigned>(logLevel)], timestamp, message); 417bc52733SRiver Riddle llvm::errs().flush(); 427bc52733SRiver Riddle } 43