• win8 学习笔记二 输出日志


    Win8 Store App的日志输出不像Desktop App 那么简单,见 这篇文档(http://www.cnblogs.com/xiaokang088/archive/2011/12/27/2303725.html

    经过同事指点加google,找到了办法。

    1. 自定义EventSource,如下:

    public class StoreEventSource : EventSource
        {
            public static StoreEventSource Instance = new StoreEventSource();
    
            [Event(1, Level = EventLevel.Verbose)]
            public void Debug(string message)
            {
                this.WriteEvent(1, message);
            }
    
            [Event(2, Level = EventLevel.Informational)]
            public void Info(string message)
            {
                this.WriteEvent(2, message);
            }
    
            [Event(3, Level = EventLevel.Warning)]
            public void Warn(string message)
            {
                this.WriteEvent(3, message);
            }
    
            [Event(4, Level = EventLevel.Error)]
            public void Error(string message)
            {
                this.WriteEvent(4, message);
            }
    
            [Event(5, Level = EventLevel.Critical)]
            public void Critical(string message)
            {
                this.WriteEvent(5, message);
            }
        }

    关于这个EventSource,看似简单,说来话长,后面有篇文章,自行捉摸。

    2. 自定义EventListenter

        sealed class IsolatedStorageEventListener : EventListener
        {
            private StorageFile store;
    
            public IsolatedStorageEventListener(string location)
            {
                init(location);
            }
    
            async void init(string location)
            {
                store = await ApplicationData.Current.LocalFolder.CreateFileAsync(location, CreationCollisionOption.ReplaceExisting);
            }
    
            protected async override void OnEventWritten(EventWrittenEventArgs eventData)
            {
                StringBuilder builder = new StringBuilder();
                builder.AppendLine(eventData.EventId.ToString());
                foreach (object o in eventData.Payload)
                {
                    builder.AppendLine(o.ToString());
                }
                await FileIO.AppendTextAsync(store, builder.ToString());
            }
    
            public override void Dispose()
            {
                base.Dispose();
            }
        }

    带没看起来都不复杂,蛮简单的,急用的同学可以直接拷贝。

    注意:这里有问题:初始化文件的时候,用的是 await , 也就是说,在写日志的时候,有可能这里还没初始化完成,这个问题还没妥善解决。

    3.调用

    IsolatedStorageEventListener listener;
    
            private void btnDebug_Click_1(object sender, RoutedEventArgs e)
            {
                if (listener == null)
                {
                    listener = new IsolatedStorageEventListener("test.txt");
                    listener.EnableEvents(StoreEventSource.Instance, EventLevel.LogAlways);
                }
              
                StoreEventSource.Instance.Debug("TestTest");
            }

    log会写在这里:C:Users[username]AppDataLocalPackages[package name]LocalState

    [package name] 在  Package.appxmanifestPackagingPackage name

    好了,火急火燎的同学,您可以直接粘贴过去用了,貌似还 有点问题,我也在捉摸。

    相关资料如下:

    1. 这个EventSource 其实是用来做性能分析的,具体见下文。

    Tracing with EventSource in .NET 4.5(http://dev.goshoom.net/en/2013/04/tracing-with-eventsource/)

    2.关于ETW和PerView的博客,非常详细

    Vance Morrison's Weblog(http://blogs.msdn.com/b/vancem/)

    3.specification for EventSource , 这个很重要。

    The specification for the System.Diagnostics.Tracing.EventSource class.
    http://blogs.msdn.com/b/vancem/archive/2012/07/09/more-details-on-eventsource-the-class-specification.aspx

    就这些了,我也是刚开始学习,不对的地方请多多指教。

  • 相关阅读:
    第一次项目总结
    动画animation
    动画基本
    JQ属性和CSS
    JQ选择器
    关于JS的循环和函数,由入门到放弃
    Js知识点
    课程总结
    移动端开发--项目总总结
    项目总结
  • 原文地址:https://www.cnblogs.com/xiaokang088/p/3140880.html
Copyright © 2020-2023  润新知