using NLog;
using NLog.Config;
using NLog.Targets;
using System;
using System.IO;
using System.Text;
namespace PublicTools
{
public class LogHelper
{
private string _prefix = string.Empty;
private Logger _logger;
private static object obj = new object();
private static LogHelper _log;
public static LogHelper Log
{
get
{
if (_log == null)
{
lock (obj)
{
if (_log == null)
{ _log = new LogHelper(); }
}
}
return _log;
}
set => _log = value;
}
public LogHelper()
{
var config = new LoggingConfiguration();
var fileTarget = new FileTarget();
fileTarget.FileName = "${basedir}/ProjectLogs/${shortdate}/Log-${level}-${shortdate}.txt";
fileTarget.Layout = @"${date:format=yyyy-MM-dd HH\:mm\:ss} |${message}";
fileTarget.Encoding = Encoding.UTF8;
config.AddTarget("file", fileTarget);
var rule = new LoggingRule("*", LogLevel.Debug, fileTarget);
config.LoggingRules.Add(rule);
LogManager.Configuration = config;
_logger = NLog.LogManager.GetLogger("log");
LogManager.Setup();
}
/// <summary>
/// 设置log文件前缀,会删掉默认的时间前缀
/// </summary>
/// <param name="LayoutPrefix"></param>
public void SetLayoutPrefix(string LayoutPrefix)
{
var config = new LoggingConfiguration();
var fileTarget = new FileTarget();
config.AddTarget("file", fileTarget);
fileTarget.FileName = "${basedir}/ProjectLogs/${shortdate}/Log-${level}-${shortdate}.txt";
//fileTarget.Layout = "${longdate} |${message}";
fileTarget.Layout = LayoutPrefix + "${message}";
fileTarget.Encoding = Encoding.UTF8;
var rule = new LoggingRule("*", LogLevel.Debug, fileTarget);
config.LoggingRules.Add(rule);
LogManager.Configuration = config;
_logger = LogManager.GetLogger("Log");
LogManager.Setup();
}
/// <summary>
///
/// </summary>
/// <param name="dir"></param>
/// <param name="logPath">可选择相对路径,默认绝对路径</param>
public void SetLogPath(string dir, LogPath logPath=LogPath.customize)
{
dir = dir.Replace(@"\", "/");
if (Path.GetExtension(dir) == "")
{
dir = dir + "/Log-${level}-${shortdate}.txt";
}
if (logPath == LogPath.BasePath)
{
dir = AppDomain.CurrentDomain.BaseDirectory+ "/ProjectLogs/" + dir;
}
var config = LogManager.Configuration;
var fileTarget = (FileTarget)config.FindTargetByName("file");
fileTarget.FileName = dir;
}
/// <summary>
/// 设置log文件前缀,不会删掉默认的时间前缀
/// </summary>
/// <param name="LayoutPrefix"></param>
public void SetPrefix(string prefix)
{
_prefix = prefix;
}
#region Debug,调试
public void Debug(string msg)
{
_logger.Debug(_prefix + msg);
}
public void Debug(string msg, Exception err)
{
_logger.Debug(err, _prefix + msg);
}
#endregion
#region Info,信息
public void Info(string msg)
{
_logger.Info(_prefix + msg);
}
public void InfoWithOutPrefix(string msg)
{
_logger.Info( msg);
}
public void Info(string msg, Exception err)
{
_logger.Info(err.Message, _prefix + msg);
}
#endregion
#region Warn,警告
public void Warn(string msg)
{
_logger.Warn(_prefix + msg);
}
public void Warn(string msg, Exception err)
{
_logger.Warn(err, _prefix + msg);
}
#endregion
#region Trace,追踪
public void Trace(string msg)
{
_logger.Trace(_prefix + msg);
}
public void Trace(string msg, Exception err)
{
_logger.Trace(err, _prefix + msg);
}
#endregion
#region Error,错误
public void Error(string msg)
{
_logger.Error(_prefix + msg);
}
public void Error(string msg, Exception err)
{
_logger.Error(err.Message, _prefix + msg);
}
#endregion
public void Fatal(string msg)
{
_logger.Fatal(_prefix + msg);
}
public void Fatal(string msg, Exception err)
{
_logger.Fatal(err, _prefix + msg);
}
}
public enum LogPath
{
customize =0,
BasePath =1
}
}
使用:
PublicTools.LogHelper.Log.Debug("Test");