123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using Serilog;
- using Serilog.Core;
- using Serilog.Events;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace XdCxRhDW.Framework
- {
- public static class LogHelper
- {
- static LogHelper()
- {
- AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
- {
- string path1 = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AddIns");
- string path2 = AppDomain.CurrentDomain.BaseDirectory;
- string dll1 = Path.Combine(path1, args.Name.Split(',')[0] + ".dll");
- string dll2 = Path.Combine(path2, args.Name.Split(',')[0] + ".dll");
- if (File.Exists(dll1))
- {
- return Assembly.LoadFrom(dll1);
- }
- if (File.Exists(dll2))
- {
- return Assembly.LoadFrom(dll2);
- }
- return null;
- };
- }
- private static bool _hasBuild = false;
- public static void BuildLogger(bool usePID = true)
- {
- string outputTemplate;
- if (usePID)
- outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][PID={PID}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";
- else
- outputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff}[线程={ThreadId}][{Level:u3}]{Message:lj}{NewLine}\t{Exception}";
- Serilog.Log.Logger = new Serilog.LoggerConfiguration()
- .Enrich.FromLogContext()
- .Enrich.With(new SerilogEnricher(usePID))
- .WriteTo.Console(outputTemplate: outputTemplate)
- .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Information)
- .WriteTo.File("Logs\\Info\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
- .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Warning)
- .WriteTo.File("Logs\\Warning\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
- .WriteTo.Logger(p => p.Filter.ByIncludingOnly(e => e.Level == Serilog.Events.LogEventLevel.Error)
- .WriteTo.File("Logs\\Error\\.log", rollingInterval: Serilog.RollingInterval.Day, outputTemplate: outputTemplate))
- .CreateLogger();
- _hasBuild = true;
- }
- public static void Info(string msg)
- {
- if (!_hasBuild)
- BuildLogger();
- Serilog.Log.Information(msg);
- }
- public static void Warning(string msg, Exception ex = null)
- {
- if (!_hasBuild)
- BuildLogger();
- Serilog.Log.Warning(ex, msg);
- }
- public static void Error(string msg, Exception ex = null)
- {
- if (!_hasBuild)
- BuildLogger();
- Serilog.Log.Error(ex, msg);
- }
- }
- /// <summary>
- /// Serilog日志添加线程ID
- /// </summary>
- class SerilogEnricher : ILogEventEnricher
- {
- private bool useProcessId;
- private string PID;
- public SerilogEnricher(bool useProcessId = false)
- {
- this.useProcessId = useProcessId;
- if (useProcessId)
- {
- this.PID = Process.GetCurrentProcess().Id.ToString("D5");
- }
- }
- /// <summary>
- /// 在日志中添加线程ID
- /// </summary>
- /// <param name="logEvent"></param>
- /// <param name="propertyFactory"></param>
- public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
- {
- logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty(
- "ThreadId", Thread.CurrentThread.ManagedThreadId.ToString("D3")));
- if (useProcessId)
- {
- logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("PID", PID));
- }
- }
- }
- }
|