<Window x:Class="Wpf_demo_Serilog.MainWindow"
? ? ? ? xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
? ? ? ? xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
? ? ? ? xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
? ? ? ? xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
? ? ? ? xmlns:local="clr-namespace:Wpf_demo_Serilog"
? ? ? ? mc:Ignorable="d"
? ? ? ? Title="MainWindow" Height="350" Width="600">
? ? <Grid>
? ? ? ? <StackPanel Orientation="Horizontal" Height="50" Width="300">
? ? ? ? ? ? <Button Content="info log" Click="Button_Click" Margin="10"/>
? ? ? ? ? ? <Button Content="error log" Click="Button_Click_1" Margin="10"/>
? ? ? ? ? ? <Button Content="debug log" Click="Button_Click_2" Margin="10"/>
? ? ? ? </StackPanel>
? ? </Grid>
</Window>
using System.Threading.Tasks;
using System.Windows;
namespace Wpf_demo_Serilog
{
? ? public partial class MainWindow : Window
? ? {
? ? ? ? // at the beginning of the class
? ? ? ? private static Serilog.ILogger Logger => Serilog.Log.ForContext<MainWindow>();
? ? ? ??
? ? ? ? public MainWindow()
? ? ? ? {
? ? ? ? ? ? InitializeComponent(); ? ? ? ? ??
? ? ? ? }
? ? ? ? private void Button_Click(object sender, RoutedEventArgs e)
? ? ? ? {
? ? ? ? ? ? Logger.Information("Hello World!");
? ? ? ? }
? ? ? ? private void Button_Click_1(object sender, RoutedEventArgs e)
? ? ? ? {
? ? ? ? ? ? Logger.Information("Hello World!");
? ? ? ? ? ? TestClass1 tc = new TestClass1();
? ? ? ? ? ? tc.TestLog();
? ? ? ? }
? ? ? ? private void Button_Click_2(object sender, RoutedEventArgs e)
? ? ? ? {
? ? ? ? ? ? Logger.Debug("Hello China!");
? ? ? ? ? ? Task.Run(() =>
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Logger.Information("HI~!");
? ? ? ? ? ? });
? ? ? ? }
? ? ? ??
? ? }
}
using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Wpf_demo_Serilog
{
? ? public class TestClass1
? ? {
? ? ? ? private static Serilog.ILogger Logger => Serilog.Log.ForContext<TestClass1>();
? ? ? ? public ?void TestLog()
? ? ? ? {
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? int[] numbers = { 1, 2, 3 };
? ? ? ? ? ? ? ? Console.WriteLine(numbers[9]); // 不存在会报错!
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Logger.Error(ex.ToString());
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
using Serilog;
using Serilog.Configuration;
using Serilog.Core;
using Serilog.Events;
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Threading;
namespace Wpf_demo_Serilog
{ ??
? ? public partial class App : Application
? ? {
? ? ? ? public App()
? ? ? ? {
? ? ? ? ? ? InitLog();
? ? ? ? }
? ? ? ? private void InitLog()
? ? ? ? {
? ? ? ? ? ? StackTrace trace = new StackTrace();
? ? ? ? ? ? //获取是哪个类来调用的
? ? ? ? ? ? string sourceClass = trace.GetFrame(1).GetMethod().DeclaringType.Name;
? ? ? ? ? ? //LoggingExtensions.WithClassName();
? ? ? ? ? ? // 创建全局静态实例
? ? ? ? ? ? Log.Logger = new LoggerConfiguration()
? ? ? ? ? ? ? ? .Enrich.FromLogContext()
? ? ? ? ? ? ? ? .Enrich.WithThreadId()
? ? ? ? ? ? ? ? .Enrich.WithProcessId() ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //设置最低等级
? ? ? ? ? ? ? ? .MinimumLevel.Verbose() ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? //将事件发送到文件
? ? ? ? ? ? ? ? //{Message:lj}表示将消息序列化成json字符串,string类型除外(j表示json,l表示except for string literals)
? ? ? ? ? ? ? ? //{Level:u3}表示将日志等级的输出显示为3个大写字符,如DBG、INF、ERR等。{Level:w3}表示三个字符的小写,
? ? ? ? ? ? ? ? //{Properties:j}用来显示额外的上下文信息
? ? ? ? ? ? ? ? .WriteTo.File(@".\Log\Log.txt", ? ? ? ? ? ? /*日志文件名*/
? ? ? ? ? ? ? ? ? ? outputTemplate: ? ? ? ? ? ? ? ? ? ? ? ? /*设置输出格式,显示详细异常信息*/
? ? ? ? ? ? ? ? ? ? @"{Timestamp:yyyy-MM-dd HH:mm-ss.fff }[{Level}] (ThreadId:{ThreadId} ProcessId:{ProcessId} Class:{SourceContext}) {Message:lj}{NewLine}{Exception}",
? ? ? ? ? ? ? ? ? ? rollingInterval: RollingInterval.Day, ? /*日志按日保存*/
? ? ? ? ? ? ? ? ? ? rollOnFileSizeLimit: true, ? ? ? ? ? ? ?/*限制单个文件的最大长度*/
? ? ? ? ? ? ? ? ? ? encoding: Encoding.UTF8, ? ? ? ? ? ? ? ?/*文件字符编码*/
? ? ? ? ? ? ? ? ? ? retainedFileCountLimit: 10, ? ? ? ? ? ? /*最大保存文件数*/
? ? ? ? ? ? ? ? ? ? fileSizeLimitBytes: 10 * 1024) ? ? ? ? ?/*最大单个文件长度*/
? ? ? ? ? ? ? ? .CreateLogger();
? ? ? ? }
? ? ? ? protected override void OnStartup(StartupEventArgs e)
? ? ? ? {
? ? ? ? ? ? this.DispatcherUnhandledException += App_DispatcherUnhandledException;
? ? ? ? ? ? this.Dispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;
? ? ? ? ? ? this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;
? ? ? ? ? ? base.OnStartup(e);
? ? ? ? }
? ? ? ? private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
? ? ? ? {
? ? ? ? ? ? Log.Error("[App_DispatcherUnhandledException] " + e?.Exception);
? ? ? ? ? ? e.Handled = true;
? ? ? ? }
? ? ? ? private void Dispatcher_UnhandledExceptionFilter(object sender, DispatcherUnhandledExceptionFilterEventArgs e)
? ? ? ? {
? ? ? ? ? ? Log.Error("[Dispatcher_UnhandledExceptionFilter] " + e?.Exception);
? ? ? ? }
? ? ? ? private void Dispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
? ? ? ? {
? ? ? ? ? ? Log.Error("[Dispatcher_UnhandledException] " + e?.Exception);
? ? ? ? ? ? e.Handled = true;
? ? ? ? }
? ? }
}
?