当前位置: 首页 > news >正文

多商户开源商城seo外链工具软件

多商户开源商城,seo外链工具软件,公司网站制作要,贵阳网站商城建设目录 一、日志Sink(接收器) 二、Trace追踪实现日志 三、日志滚动 一、日志Sink(接收器) 安装NuGet包:Serilog Sink有很多种,这里介绍两种: Console接收器(安装Serilog.Sinks.Console); File接收器(安装…

目录

一、日志Sink(接收器)

二、Trace追踪实现日志

三、日志滚动


一、日志Sink(接收器)

安装NuGet包:Serilog

Sink有很多种,这里介绍两种:

                Console接收器(安装Serilog.Sinks.Console);

                File接收器(安装Serilog.Sinks.File);

MinimumLevel:最小记录级别

rollingInterval:生成日志文件周期

outputTemplate:输出日志模板

继承ILogEventSink接口实现 Emit:当Sink器接收到新日志时触发

通过该接口将接收器接收的日志添加进内部日志集合

将该接口实现类实例化对象通过WriteTo.Sink(myEventSink)与Logger绑定

实现 ILogEventSink接口示例:

 public List<string> Logs = new List<string>();private readonly ITextFormatter _formatter=new MessageTemplateTextFormatter("Message:{Message}  [{Level}]  Location:{FilePath}[{LineNumber}]");public void Emit(LogEvent logEvent){if (logEvent != null){var textWriter=new StringWriter();_formatter.Format(logEvent, textWriter);Logs.Add(textWriter.ToString());}}

 Main程序:

  MyEventSink myEventSink = new MyEventSink();string path = "Logs\\Error\\.txt";string outputTemplate = "{NewLine}Date: {Timestamp:yyyy-MM-dd HH:mm:ss.fff}\tLevel: {Level}\tCallName: {SourceContext}->{MemberName}"+ "{NewLine}Path: {FilePath}[{LineNumber}]"+ "{NewLine}Message: {Message}";Log.Logger = new LoggerConfiguration().Enrich.FromLogContext()//记录相关上下文信息.MinimumLevel.Debug().WriteTo.Sink(myEventSink).WriteTo.Logger(log => log.Filter.ByIncludingOnly(p => p.Level == LogEventLevel.Error).WriteTo.File(path, rollingInterval: RollingInterval.Day, outputTemplate: outputTemplate)).WriteTo.Console().CreateLogger();Log.Warning("*****************Warning***************");Log.Logger.Information("*******************Info****************");Log.Logger.CallError<Test>("#####################Error##################");foreach (string str in myEventSink.Logs){Console.WriteLine(str);}
    static class LogExtension{public static void CallError<T>(this ILogger logger, string message,[CallerMemberName] string meberName = "",[CallerFilePath] string filepath = "",[CallerLineNumber] int lineNum = 0)=> logger.ForContext<T>().ForContext("MemberName", meberName).ForContext("FilePath", filepath).ForContext("LineNumber", lineNum).Error(message);public static void CallError<T>(this ILogger logger, Exception e, string message,[CallerMemberName] string meberName = "",[CallerFilePath] string filepath = "",[CallerLineNumber] int lineNum = 0)=> logger.ForContext<T>().ForContext("MemberName", meberName).ForContext("FilePath", filepath).ForContext("LineNumber", lineNum).Error(e, message);}

二、Trace追踪实现日志

继承抽象类TraceListener,重写方法TraceEvent

注意:添加监听对象Trace.Listeners.Add(this);

        public override void TraceEvent(TraceEventCache? eventCache, string source, TraceEventType eventType, int id, string? message){switch (eventType){case TraceEventType.Error:Log.Logger.CallError<MyTraceListen>(message);break;case TraceEventType.Warning:Log.Logger.Warning(message);break;case TraceEventType.Information:Log.Logger.Information(message);break;default:break;}}

三、日志滚动

通过ObservableCollection类的CollectionChanged事件实现日志自动滚动到底部:

        集合改变触发事件,更改附加属性AutoScroll值,值更改触发CallBack将日志滚动到底部;

注意:MouseEnterMouseLeave两事件的响应原因:查看日志时,防止日志自动滚动到底部;

        <DataGrid attach:ScrollHelper.AutoScroll="{Binding AutoScroll}"AutoGenerateColumns="False"CanUserAddRows="False"CanUserDeleteRows="False"CanUserReorderColumns="False"CanUserResizeColumns="False"CanUserResizeRows="False"CanUserSortColumns="False"ItemsSource="{Binding LogService.Logs}"><i:Interaction.Triggers><i:EventTrigger EventName="MouseEnter"><i:InvokeCommandAction Command="{Binding MouseEnterCommand}" /></i:EventTrigger><i:EventTrigger EventName="MouseLeave"><i:InvokeCommandAction Command="{Binding MouseLeaveCommand}" /></i:EventTrigger></i:Interaction.Triggers><DataGrid.Columns><DataGridTextColumn Binding="{Binding Time}" Header="时间" /><DataGridTextColumn Binding="{Binding Lev}" Header="级别" /><DataGridTextColumn Binding="{Binding Message}" Header="信息"><DataGridTextColumn.ElementStyle><Style><Setter Property="TextBlock.TextWrapping" Value="Wrap" /><Setter Property="TextBlock.TextAlignment" Value="Left" /></Style></DataGridTextColumn.ElementStyle></DataGridTextColumn></DataGrid.Columns><DataGrid.RowStyle><Style TargetType="DataGridRow" BasedOn="{StaticResource DataGridRowStyle}"><Style.Triggers><DataTrigger Binding="{Binding Lev}" Value="Error"><Setter Property="Foreground" Value="Red"/></DataTrigger><DataTrigger Binding="{Binding Lev}" Value="Warn"><Setter Property="Foreground" Value="Orange"/></DataTrigger></Style.Triggers></Style></DataGrid.RowStyle></DataGrid>
        public LogService LogService { get; set; }=LogService.GetInstance();private bool _autoScroll;public bool AutoScroll{get { return _autoScroll; }set => SetProperty(ref _autoScroll, value);}[RelayCommand]public void MouseEnter(){LogService._logs.CollectionChanged -= Scroll;}[RelayCommand]public void MouseLeave(){LogService._logs.CollectionChanged += Scroll;}private void Scroll(object sender, NotifyCollectionChangedEventArgs e){AutoScroll = !AutoScroll;}public MainWinViewModel(){LogService.OpenListen();LogService._logs.CollectionChanged += Scroll;}

http://www.zhongyajixie.com/news/23969.html

相关文章:

  • 佛山做网站公司排名360站长平台链接提交
  • 长春网上建设网站百度竞价可以自学吗
  • wordpress url插件百度 seo排名查询
  • 美国cn2站群服务器seo培训网
  • 网站正在建设模板上海关键词推广
  • 微信网站应用开发网站优化方案
  • 奇趣网做网站广东东莞今日最新消息
  • 做网站备案哪些条件网上如何推广产品
  • 苏州高新区建设局网站管网网站推广哪个平台最好
  • 安阳哪里有做网站的seo可以从哪些方面优化
  • dw对网站建设有哪些作用宁波seo服务
  • oppo网站开发设计适合交换友情链接的是
  • wordpress 建立分类优势的seo网站优化排名
  • dedecms 英文网站巨量算数数据分析入口
  • 网站如何做银联在线支付北京seo关键词
  • wordpress 全屏模板seo关键词的选择步骤
  • 中原郑州网站建设搜索引擎广告案例
  • 外贸免费网站制作百度seo sem
  • 广州网站开发哪家专业网络推广策划方案
  • 网站建设的电话销售免费发帖推广网站
  • 网站建设大约需要多少钱企业培训课程ppt
  • 微信公众号做视频网站小红书怎么做关键词排名优化
  • 做 商城 网站 费用百度账号管理
  • 网站营销看法常德网站建设公司
  • 帝国cms 网站地图 自定义关键词搜索优化外包
  • 林芝网站建设新品牌进入市场的推广方案
  • 上海微信网站建设价格广告设计公司
  • 企业网站定位推广优化方案
  • 网站开发工程师职责seo搜索优化培训
  • 购物网站开发思路让手机变流畅的软件下载