|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- # The Logger in LLamaSharp
-
- LLamaSharp supports customized logger because it could be used in many kinds of applications, like Winform/WPF, WebAPI and Blazor, so that the preference of logger varies.
-
- ## Define customized logger
-
- What you need to do is to implement the `ILogger` interface.
-
- ```cs
- public interface ILLamaLogger
- {
- public enum LogLevel
- {
- Info,
- Debug,
- Warning,
- Error
- }
- void Log(string source, string message, LogLevel level);
- }
- ```
-
- The `source` specifies where the log message is from, which could be a function, a class, etc..
-
- The `message` is the log message itself.
-
- The `level` is the level of the information in the log. As shown above, there're four levels, which are `info`, `debug`, `warning` and `error` respectively.
-
- The following is a simple example of the logger implementation:
-
- ```cs
- public sealed class LLamaDefaultLogger : ILLamaLogger
- {
- private static readonly Lazy<LLamaDefaultLogger> _instance = new Lazy<LLamaDefaultLogger>(() => new LLamaDefaultLogger());
-
- private bool _toConsole = true;
- private bool _toFile = false;
-
- private FileStream? _fileStream = null;
- private StreamWriter _fileWriter = null;
-
- public static LLamaDefaultLogger Default => _instance.Value;
-
- private LLamaDefaultLogger()
- {
-
- }
-
- public LLamaDefaultLogger EnableConsole()
- {
- _toConsole = true;
- return this;
- }
-
- public LLamaDefaultLogger DisableConsole()
- {
- _toConsole = false;
- return this;
- }
-
- public LLamaDefaultLogger EnableFile(string filename, FileMode mode = FileMode.Append)
- {
- _fileStream = new FileStream(filename, mode, FileAccess.Write);
- _fileWriter = new StreamWriter(_fileStream);
- _toFile = true;
- return this;
- }
-
- public LLamaDefaultLogger DisableFile(string filename)
- {
- if (_fileWriter is not null)
- {
- _fileWriter.Close();
- _fileWriter = null;
- }
- if (_fileStream is not null)
- {
- _fileStream.Close();
- _fileStream = null;
- }
- _toFile = false;
- return this;
- }
-
- public void Log(string source, string message, LogLevel level)
- {
- if (level == LogLevel.Info)
- {
- Info(message);
- }
- else if (level == LogLevel.Debug)
- {
-
- }
- else if (level == LogLevel.Warning)
- {
- Warn(message);
- }
- else if (level == LogLevel.Error)
- {
- Error(message);
- }
- }
-
- public void Info(string message)
- {
- message = MessageFormat("info", message);
- if (_toConsole)
- {
- Console.ForegroundColor = ConsoleColor.White;
- Console.WriteLine(message);
- Console.ResetColor();
- }
- if (_toFile)
- {
- Debug.Assert(_fileStream is not null);
- Debug.Assert(_fileWriter is not null);
- _fileWriter.WriteLine(message);
- }
- }
-
- public void Warn(string message)
- {
- message = MessageFormat("warn", message);
- if (_toConsole)
- {
- Console.ForegroundColor = ConsoleColor.Yellow;
- Console.WriteLine(message);
- Console.ResetColor();
- }
- if (_toFile)
- {
- Debug.Assert(_fileStream is not null);
- Debug.Assert(_fileWriter is not null);
- _fileWriter.WriteLine(message);
- }
- }
-
- public void Error(string message)
- {
- message = MessageFormat("error", message);
- if (_toConsole)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.WriteLine(message);
- Console.ResetColor();
- }
- if (_toFile)
- {
- Debug.Assert(_fileStream is not null);
- Debug.Assert(_fileWriter is not null);
- _fileWriter.WriteLine(message);
- }
- }
-
- private string MessageFormat(string level, string message)
- {
- DateTime now = DateTime.Now;
- string formattedDate = now.ToString("yyyy.MM.dd HH:mm:ss");
- return $"[{formattedDate}][{level}]: {message}";
- }
- }
- ```
|