|
|
|
|
using NLog;
|
|
|
|
|
using NLog.Config;
|
|
|
|
|
using NLog.Targets;
|
|
|
|
|
using NLog.Targets.Wrappers;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
|
|
|
|
namespace JwKdsV.Core.Utils
|
|
|
|
|
{
|
|
|
|
|
public static class NLogUtils
|
|
|
|
|
{
|
|
|
|
|
private static object locker = new object();
|
|
|
|
|
|
|
|
|
|
static NLogUtils()
|
|
|
|
|
{
|
|
|
|
|
string dataDirFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory , @"data/backup/");
|
|
|
|
|
if (!Directory.Exists(dataDirFullPath))
|
|
|
|
|
{
|
|
|
|
|
lock (locker)
|
|
|
|
|
{
|
|
|
|
|
if (!Directory.Exists(dataDirFullPath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(dataDirFullPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string logDirFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory , @"logs/");
|
|
|
|
|
|
|
|
|
|
if (!Directory.Exists(logDirFullPath))
|
|
|
|
|
{
|
|
|
|
|
lock (locker)
|
|
|
|
|
{
|
|
|
|
|
if (!Directory.Exists(logDirFullPath))
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(logDirFullPath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void nlog_to_file_and_archive(LoggingConfiguration config)
|
|
|
|
|
{
|
|
|
|
|
var fileTarget = new FileTarget
|
|
|
|
|
{
|
|
|
|
|
FileName = "${basedir}/logs/${date:format=yyyyMMdd}.txt" ,
|
|
|
|
|
Layout = "${longdate} | [${uppercase:${level}}] | ${logger} | ${message} | ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" ,
|
|
|
|
|
ConcurrentWrites = true ,
|
|
|
|
|
AutoFlush = true ,
|
|
|
|
|
KeepFileOpen = true ,
|
|
|
|
|
DeleteOldFileOnStartup = false ,
|
|
|
|
|
ArchiveAboveSize = 3 * 1024 * 1024 ,
|
|
|
|
|
MaxArchiveFiles = 10 ,
|
|
|
|
|
ArchiveNumbering = ArchiveNumberingMode.Date ,
|
|
|
|
|
ArchiveDateFormat = "HHmmss"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AsyncTargetWrapper wrapper = new AsyncTargetWrapper();
|
|
|
|
|
wrapper.WrappedTarget = fileTarget;
|
|
|
|
|
wrapper.QueueLimit = 5000;
|
|
|
|
|
wrapper.OverflowAction = AsyncTargetWrapperOverflowAction.Discard;
|
|
|
|
|
|
|
|
|
|
// Adding "File" as one of the log targets
|
|
|
|
|
config.AddTarget("file" , wrapper);
|
|
|
|
|
config.LoggingRules.Add(new NLog.Config.LoggingRule("*" , LogLevel.Info , wrapper));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void nlog_to_console(LoggingConfiguration config)
|
|
|
|
|
{
|
|
|
|
|
var consoleTarget = new ColoredConsoleTarget
|
|
|
|
|
{
|
|
|
|
|
Layout = "${longdate} | [${uppercase:${level}}] | ${logger} | ${message} | ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}"
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
AsyncTargetWrapper wrapper = new AsyncTargetWrapper();
|
|
|
|
|
wrapper.WrappedTarget = consoleTarget;
|
|
|
|
|
wrapper.QueueLimit = 5000;
|
|
|
|
|
wrapper.OverflowAction = AsyncTargetWrapperOverflowAction.Discard;
|
|
|
|
|
|
|
|
|
|
config.AddTarget("console" , wrapper);
|
|
|
|
|
config.LoggingRules.Add(new LoggingRule("*" , LogLevel.Info , wrapper));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void InitLogger()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
LogManager.ThrowExceptions = true;
|
|
|
|
|
|
|
|
|
|
var config = new LoggingConfiguration();
|
|
|
|
|
|
|
|
|
|
nlog_to_console(config);
|
|
|
|
|
|
|
|
|
|
nlog_to_file_and_archive(config);
|
|
|
|
|
|
|
|
|
|
LogManager.Configuration = config;
|
|
|
|
|
|
|
|
|
|
//将Common-Logging日志采用Nlog输出
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
//ExceptionUtils.Current.Handle(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|