You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
3.6 KiB
C#

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);
}
}
}
}