2016-10-12 16:37:54 +03:00
using System ;
2016-11-07 13:05:36 +02:00
using System.Diagnostics ;
2016-10-12 16:37:54 +03:00
using log4net ;
using log4net.Appender ;
using log4net.Core ;
using log4net.Layout ;
using log4net.Repository.Hierarchy ;
namespace MTApiService
{
2018-02-15 17:37:08 +02:00
public class MtLog
{
#region ctor
internal MtLog ( Type type )
{
_log = LogManager . GetLogger ( type );
}
#endregion
#region Public
public void Debug ( object message )
{
_log . Debug ( message );
}
public void Error ( object message )
{
_log . Error ( message );
}
public void Fatal ( object message )
{
_log . Fatal ( message );
}
public void Info ( object message )
{
_log . Info ( message );
}
public void Warn ( object message )
{
_log . Warn ( message );
}
#endregion
#region Private
private readonly ILog _log ;
#endregion
}
2020-10-22 21:19:30 +03:00
public enum LogLevel
{
Off ,
Debug ,
Info
}
2016-10-12 16:37:54 +03:00
public class LogConfigurator
{
2018-05-08 16:44:57 +03:00
private const string LogFileNameExtension = "log" ;
2016-10-12 16:37:54 +03:00
public static void Setup ( string profileName )
{
2020-10-22 21:19:30 +03:00
#if ( DEBUG )
const LogLevel logLevel = LogLevel . Debug ;
#else
const LogLevel logLevel = LogLevel . Info ;
#endif
Setup ( profileName , logLevel );
}
public static void Setup ( string profileName , LogLevel logLevel )
{
2016-10-12 16:37:54 +03:00
if ( string . IsNullOrEmpty ( profileName ))
throw new ArgumentNullException ();
var hierarchy = ( Hierarchy ) LogManager . GetRepository ();
2020-10-22 21:19:30 +03:00
//check if logger is already configurated to avoid creation many empty logs files
if ( hierarchy . Configured )
return ;
2016-10-12 16:37:54 +03:00
var patternLayout = new PatternLayout
{
ConversionPattern = "%date [%thread] %-5level %logger - %message%newline"
};
patternLayout . ActivateOptions ();
2021-07-11 17:07:23 +08:00
//var filename = $"{DateTime.Now:yyyy-dd-M--HH-mm-ss}-{Process.GetCurrentProcess().Id}.{LogFileNameExtension}"; // This filename format keeps generating tons of log files with same content but different per-second/thread filenames until the harddisk have 0KB space left
var filename = $"{DateTime.Now:yyyy-MM-dd}.{LogFileNameExtension}" ;
2016-10-12 16:37:54 +03:00
var roller = new RollingFileAppender
{
2017-01-12 16:47:41 +02:00
AppendToFile = true ,
2016-10-12 16:37:54 +03:00
File = $@"{System.IO.Path.GetTempPath()}{profileName}\Logs\{filename}" ,
Layout = patternLayout ,
PreserveLogFileNameExtension = true ,
MaxSizeRollBackups = 5 ,
MaximumFileSize = "1GB" ,
RollingStyle = RollingFileAppender . RollingMode . Size ,
StaticLogFileName = false
};
roller . ActivateOptions ();
hierarchy . Root . AddAppender ( roller );
2020-10-22 21:19:30 +03:00
hierarchy . Root . Level = ConvertLogLevel ( logLevel );
2016-10-12 16:37:54 +03:00
hierarchy . Configured = true ;
}
2018-02-15 17:37:08 +02:00
public static MtLog GetLogger ( Type type )
{
if ( type == null )
throw new ArgumentNullException ( nameof ( type ));
return new MtLog ( type );
}
2020-10-22 21:19:30 +03:00
private static Level ConvertLogLevel ( LogLevel logLevel )
{
switch ( logLevel )
{
case LogLevel . Debug : return Level . Debug ;
case LogLevel . Info : return Level . Info ;
case LogLevel . Off : return Level . Off ;
default :
throw new ArgumentOutOfRangeException ( nameof ( logLevel ), logLevel , null );
}
}
2016-10-12 16:37:54 +03:00
}
}