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