The document discusses semantic logging and the Semantic Logging Application Block (SLAB). SLAB provides a structured way to log events and supports multiple destinations like Azure Tables, SQL Database, and Elasticsearch. It uses EventSource and Event Tracing for Windows to publish events in a way that avoids unstructured log chaos and allows events to be easily consumed and queried. Upcoming improvements to SLAB include additional sinks, performance optimizations, and an improved extensibility model.
The importance of search for modern applications is evident and nowadays it is higher than ever. A lot of projects use search forms as a primary interface for communication with a user. Though implementation of an intelligent search functionality is still a challenge and we need a good set of tools.
In this presentation, I will talk through the high-level architecture and benefits of Elasticsearch with some examples. Aside from that, we will also take a look at its existing competitors, their similarities, and differences.
Apache Solr is a powerful search and analytics engine with features such as full-text search, faceting, joins, sorting and capable of handling large amounts of data across a large number of servers. However, with all that power and scalability comes complexity. Solr 6 supports a Parallel SQL feature which provides a simplified, well-known interface to your data in Solr, performs key operations such as sorts and shuffling inside Solr for massive speedups, provides best-practices based query optimization and by leveraging the scalability of SolrCloud and a clever implementation, allows you to throw massive amounts of computation power behind analytical queries.
In this talk, we will explore the why, what and how of Parallel SQL and its building block Streaming Expressions in Solr 6 with a hint of the exciting new developments around this feature.
The importance of search for modern applications is evident and nowadays it is higher than ever. A lot of projects use search forms as a primary interface for communication with a user. Though implementation of an intelligent search functionality is still a challenge and we need a good set of tools.
In this presentation, I will talk through the high-level architecture and benefits of Elasticsearch with some examples. Aside from that, we will also take a look at its existing competitors, their similarities, and differences.
Apache Solr is a powerful search and analytics engine with features such as full-text search, faceting, joins, sorting and capable of handling large amounts of data across a large number of servers. However, with all that power and scalability comes complexity. Solr 6 supports a Parallel SQL feature which provides a simplified, well-known interface to your data in Solr, performs key operations such as sorts and shuffling inside Solr for massive speedups, provides best-practices based query optimization and by leveraging the scalability of SolrCloud and a clever implementation, allows you to throw massive amounts of computation power behind analytical queries.
In this talk, we will explore the why, what and how of Parallel SQL and its building block Streaming Expressions in Solr 6 with a hint of the exciting new developments around this feature.
In this presentation I will show you how to setup Laravel and Elasticsearch to quickly build a search engine. This was given at a local meetup in Groningen (Netherlands).
During the talk, we will build a simple web app using Lift and then introduce Akka ( http://akkasource.org) to help scale it. Specifically, we will demonstrate Remote Actors, "Let it crash" fail over, and Dispatcher. Other Scala oriented tools we will use include sbt and ENSIME mode for emacs.
Project "Orleans" is an Actor Model framework from Microsoft Research that is currently in public preview. It is designed to make it easy for .NET developers to develop and deploy an actor-based distributed system into Microsoft Azure.
Dim the lights and queue the music. The stage has been set, and the virtual actors are soon to arrive. Come join an engaging discussion on Project Orleans and how it will create for us a world that transcends traditional three-tier architecture and truly achieves solutions with a high degree of performance, reliability, and scalability.
In this discussion, Chris will provide an overview of actor model theory and discuss how Orleans leverages virtual actors in order to provide a high throughput, low latency, and high availability solution architecture. You will also learn how this tried and tested framework has been successfully leveraged in Azure in order to provide the extremely scalable and performant platform that has brought you some of your favorite online Xbox games and Microsoft products.
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
Долгое время разработка производительных, масштабируемых, надежных и экономически эффективных распределенных систем, была прерогативой узкого круга специалистов. Переезд в «облако», сам по себе, проблему не решил. Обещанная провайдерами дешевая линейная масштабируемость, по-прежнему, недостижимая мечта для всех, сидящих «на игле» реляционных баз данных и монолитных архитектур.
С выходом Microsoft Orleans, разработчики, наконец-то, получили максимально простую и удобную платформу для создания масштабируемых и отказоустойчивых распределенных систем, предназначенных для запуска в «облаке» или в приватном дата-центре.
В докладе будут рассмотрены основные концепции и прецеденты использования платформы, такие как: Internet Of Things (IoT), распределенная обработка потоков данных, масштабирование РСУБД и любых других ограниченных ресурсов, отказоустойчивая координация длительно выполняющихся бизнес-процессов.
A short and sweet introduction to Microsoft Orleans - https://dotnet.github.io/orleans/ - OSS actor programming framework from Microsoft Research. As presented in Alt.Net Israel (http://altnet.azurewebsites.net/) meeting group, Dec 2016.
Spark UDFs are EviL, Catalyst to the rEsCue!Adi Polak
Processing data at scale usually involves struggling with performance, strict SLA, limited hardware capabilities and more. After struggling with Spark SQL query run-time, I found the felon! In this lecture, I would like to share with you the change in perspective and process we had to go through in order to find the felon (and the solution!). Today in the world of Big Data and Spark we are processing high volume transactions. Catalyst is the Spark SQL query optimizer, in this talk, we will reveal how you can fully utilize Catalyst’s optimization power in order to make queries run as fast as possible, by pushing down actions and avoiding UDFs as much as possible, while still maximizing performance.
Adi Polak - Light up the Spark in Catalyst by avoiding UDFs - Codemotion Berl...Codemotion
Processing data at scale usually results in struggling with performance, strict SLA, limited hardware and etc.I've struggled with cutting Spark SQL query run-time and found the culprit! This culprit, and SOLUTION! I would like to share with you. Today in the world of Big Data and Spark we are processing high volume transactions. Catalyst is the Spark SQL query optimizer and in this talk, you will learn how to fully utilize Catalyst optimization power in order to make our queries as fast as possible, by pushing down actions and trying to avoid UDFs as much as possible and maximizing performance
Apache Solr is a popular, open source enterprise search platform built on the Java based search engine library Apache Lucene. It powers the search and navigation features of many of the world's largest companies like Netflix, Instagram, LinkedIn, Twitter and eBay, etc.
ElasticSearch in Production: lessons learnedBeyondTrees
With Proquest Udini, we have created the worlds largest online article store, and aim to be the center for researchers all over the world. We connect to a 700M solr cluster for search, but have recently also implemented a search component with ElasticSearch. We will discuss how we did this, and how we want to use the 30M index for scientific citation recognition. We will highlight lessons learned in integrating ElasticSearch in our virtualized EC2 environments, and challenges aligning with our continuous deployment processes.
In this presentation I will show you how to setup Laravel and Elasticsearch to quickly build a search engine. This was given at a local meetup in Groningen (Netherlands).
During the talk, we will build a simple web app using Lift and then introduce Akka ( http://akkasource.org) to help scale it. Specifically, we will demonstrate Remote Actors, "Let it crash" fail over, and Dispatcher. Other Scala oriented tools we will use include sbt and ENSIME mode for emacs.
Project "Orleans" is an Actor Model framework from Microsoft Research that is currently in public preview. It is designed to make it easy for .NET developers to develop and deploy an actor-based distributed system into Microsoft Azure.
Dim the lights and queue the music. The stage has been set, and the virtual actors are soon to arrive. Come join an engaging discussion on Project Orleans and how it will create for us a world that transcends traditional three-tier architecture and truly achieves solutions with a high degree of performance, reliability, and scalability.
In this discussion, Chris will provide an overview of actor model theory and discuss how Orleans leverages virtual actors in order to provide a high throughput, low latency, and high availability solution architecture. You will also learn how this tried and tested framework has been successfully leveraged in Azure in order to provide the extremely scalable and performant platform that has brought you some of your favorite online Xbox games and Microsoft products.
"Walk in a distributed systems park with Orleans" Евгений БобровFwdays
Долгое время разработка производительных, масштабируемых, надежных и экономически эффективных распределенных систем, была прерогативой узкого круга специалистов. Переезд в «облако», сам по себе, проблему не решил. Обещанная провайдерами дешевая линейная масштабируемость, по-прежнему, недостижимая мечта для всех, сидящих «на игле» реляционных баз данных и монолитных архитектур.
С выходом Microsoft Orleans, разработчики, наконец-то, получили максимально простую и удобную платформу для создания масштабируемых и отказоустойчивых распределенных систем, предназначенных для запуска в «облаке» или в приватном дата-центре.
В докладе будут рассмотрены основные концепции и прецеденты использования платформы, такие как: Internet Of Things (IoT), распределенная обработка потоков данных, масштабирование РСУБД и любых других ограниченных ресурсов, отказоустойчивая координация длительно выполняющихся бизнес-процессов.
A short and sweet introduction to Microsoft Orleans - https://dotnet.github.io/orleans/ - OSS actor programming framework from Microsoft Research. As presented in Alt.Net Israel (http://altnet.azurewebsites.net/) meeting group, Dec 2016.
Spark UDFs are EviL, Catalyst to the rEsCue!Adi Polak
Processing data at scale usually involves struggling with performance, strict SLA, limited hardware capabilities and more. After struggling with Spark SQL query run-time, I found the felon! In this lecture, I would like to share with you the change in perspective and process we had to go through in order to find the felon (and the solution!). Today in the world of Big Data and Spark we are processing high volume transactions. Catalyst is the Spark SQL query optimizer, in this talk, we will reveal how you can fully utilize Catalyst’s optimization power in order to make queries run as fast as possible, by pushing down actions and avoiding UDFs as much as possible, while still maximizing performance.
Adi Polak - Light up the Spark in Catalyst by avoiding UDFs - Codemotion Berl...Codemotion
Processing data at scale usually results in struggling with performance, strict SLA, limited hardware and etc.I've struggled with cutting Spark SQL query run-time and found the culprit! This culprit, and SOLUTION! I would like to share with you. Today in the world of Big Data and Spark we are processing high volume transactions. Catalyst is the Spark SQL query optimizer and in this talk, you will learn how to fully utilize Catalyst optimization power in order to make our queries as fast as possible, by pushing down actions and trying to avoid UDFs as much as possible and maximizing performance
Apache Solr is a popular, open source enterprise search platform built on the Java based search engine library Apache Lucene. It powers the search and navigation features of many of the world's largest companies like Netflix, Instagram, LinkedIn, Twitter and eBay, etc.
ElasticSearch in Production: lessons learnedBeyondTrees
With Proquest Udini, we have created the worlds largest online article store, and aim to be the center for researchers all over the world. We connect to a 700M solr cluster for search, but have recently also implemented a search component with ElasticSearch. We will discuss how we did this, and how we want to use the 30M index for scientific citation recognition. We will highlight lessons learned in integrating ElasticSearch in our virtualized EC2 environments, and challenges aligning with our continuous deployment processes.
This advanced session will cover topics on how to leverage both CFML and ORM to start creating amazing applications that will be as lethal as a dinosaur riding a shark with an Uzi. We will cover ORM session management, virtual service layers, dynamic finders, dynamic counters and an enhanced Hibernate Criteria builder to create easy and programmatic HQL queries.
ML Platform 2018 Q2 Meetup - Search Relevance Debugging at LinkedInEing Ong
This was presented in ML Platform Meet-up on Mar 29, 2018 at Facebook. The meet-ups take place quarterly in SF bay area where we discuss and share advanced technology on machine learning infrastructure. Companies involved include Airbnb, Databricks, Facebook, Google, LinkedIn, Netflix, Pinterest, Twitter, and Uber.
To most developers, the database is an afterthought. You're using an ORM to write your queries for you, migrations to build your schema for you, and the cloud to run your infrastructure for you. Once you get beyond the prototype stage, however, you need to either befriend your DBA or become one yourself by using SQL Server (and Azure SQL Database) like a professional. This session is targeted to developers, and is a broad-yet-shallow look at tools, techniques, and tips to up your SQL game. Be sure to take notes, as this is a launching point for you to learn more rather than a deep dive into one topic. Primarily the Microsoft stack will be used, although users of other RDBMSes and languages may be interested in attending. Topics covered include intermediate-to-advanced T-SQL language features, query tuning, numerous tool recommendations, advanced Entity Framework use, and Azure SQL Database features. I will also be around the conference after the session to discuss topics in more depth.
Database development unit test with tSQLtSergio Govoni
When we talk about unit test, we are actually talking about a software testing level that aims to test a discrete piece of code. The word “unit” refers to the smallest piece of code that can be tested separately. In a database solution, the unit is typically a stored procedure, a trigger or a user-defined function. When you start to think about unit test, it is very important to define the System Under Test (SUT) first and isolate it! Unit testing frameworks, stubs, mock and fake objects are used to assist in unit testing. In this session we will explore the techniques and tSQLt framework to start unit testing in your database development.
Demo scripts are available here: https://github.com/segovoni/sql-server-demos/tree/master/datasaturday/2021/datasat0001/database-development-unit-test-with-tSQLt
In many database applications we first log data and then, a few hours or days later, we start analyzing it. But in a world that’s moving faster and faster, we sometimes need to analyze what is happening NOW.
Azure Stream Analytics allows you to analyze streams of data via a new Azure service. In this session you will see how to get started using this new service. From event hubs on the input side over temporal SQL queries: the demo’s in this session will show you end to end how to get started with Azure Stream Analytics.
Distributed Model Validation with EpsilonSina Madani
Scalable performance is a major challenge with current model management tools. As the size and complexity of models and model management programs increases and the cost of computing falls, one solution for improving performance of model management programs is to perform computations on multiple computers. The developed prototype demonstrates a low-overhead data-parallel approach for distributed model validation in the context of an OCL-like language. The approach minimises communication costs by exploiting the deterministic structure of programs and can take advantage of multiple cores on each (heterogenous) machine with highly configurable computational granularity. Performance evaluation shows linear improvements with more machines and processor cores, being up to 340x faster than the baseline sequential program with 88 computers.
Gen Z and the marketplaces - let's translate their needsLaura Szabó
The product workshop focused on exploring the requirements of Generation Z in relation to marketplace dynamics. We delved into their specific needs, examined the specifics in their shopping preferences, and analyzed their preferred methods for accessing information and making purchases within a marketplace. Through the study of real-life cases , we tried to gain valuable insights into enhancing the marketplace experience for Generation Z.
The workshop was held on the DMA Conference in Vienna June 2024.
2.Cellular Networks_The final stage of connectivity is achieved by segmenting...JeyaPerumal1
A cellular network, frequently referred to as a mobile network, is a type of communication system that enables wireless communication between mobile devices. The final stage of connectivity is achieved by segmenting the comprehensive service area into several compact zones, each called a cell.
APNIC Foundation, presented by Ellisha Heppner at the PNG DNS Forum 2024APNIC
Ellisha Heppner, Grant Management Lead, presented an update on APNIC Foundation to the PNG DNS Forum held from 6 to 10 May, 2024 in Port Moresby, Papua New Guinea.
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBrad Spiegel Macon GA
Brad Spiegel Macon GA’s journey exemplifies the profound impact that one individual can have on their community. Through his unwavering dedication to digital inclusion, he’s not only bridging the gap in Macon but also setting an example for others to follow.
Italy Agriculture Equipment Market Outlook to 2027harveenkaur52
Agriculture and Animal Care
Ken Research has an expertise in Agriculture and Animal Care sector and offer vast collection of information related to all major aspects such as Agriculture equipment, Crop Protection, Seed, Agriculture Chemical, Fertilizers, Protected Cultivators, Palm Oil, Hybrid Seed, Animal Feed additives and many more.
Our continuous study and findings in agriculture sector provide better insights to companies dealing with related product and services, government and agriculture associations, researchers and students to well understand the present and expected scenario.
Our Animal care category provides solutions on Animal Healthcare and related products and services, including, animal feed additives, vaccination
2. • No real structure
• What’s in there?
• Sheer number of files & types of logs is
overwhelming
• Hard to consume/automate
• Subject to compatibility/inconsistencies.
Logs are Frustrating
4. Unstructured Log
An example
176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order.
225 [main] INFO examples.SortAlgo - Entered the sort method.
262 [main] DEBUG SortAlgo.OUTER i=1 - Outer loop.
276 [main] DEBUG SortAlgo.SWAP i=1 j=0 - Swapping intArray[0] = 1 and intArray[1] = 0
290 [main] DEBUG SortAlgo.OUTER i=0 - Outer loop.
304 [main] INFO SortAlgo.DUMP - Dump of integer array:
317 [main] INFO SortAlgo.DUMP - Element [0] = 0
331 [main] INFO SortAlgo.DUMP - Element [1] = 1
343 [main] INFO examples.Sort - The next log statement should be an error message.
346 [main] ERROR SortAlgo.DUMP - Tried to dump an uninitialized array.
467 [main] INFO examples.Sort - Exiting main method.
6. • Logging cannot be just a checkmark of doing something.
• You have to think about consumption and purpose.
• Allow appropriate decisions to be made at appropriate time,
explicitly separating:
•WHAT to log
•WHEN to log it
•WHERE to log
We are on a mission
Changing the way people think about logging
8. Technologies at Play
Event Tracing
for Windows
(ETW)
• Native to Windows platform
• Great performance & OK diagnostic tooling
• Historically hard to publish events
EventSource
class
• Introduced in .NET Framework 4.5
• Meant to ease authoring experience
• Extensible but supports ETW-only out of the box
Semantic
Logging
Application
Block (SLAB)
• Provides several destinations for events published with
EventSource
• Does not require any knowledge in ETW
• Additional tooling support for authoring events
10. • Sinks
• Formatters
• Out-Of-Process Service
• Event Source Analyzer
• Observable Event Listener
Sinks
Features of SLAB
11. • Azure Tables
• SQL Database
• Flat file
• Rolling flat file
• Console
• Elasticsearch
Sinks
Features of SLAB
12. • JSON
• XML
• Natural (plain-text)
Formatters
Features of SLAB
13. • Hosted as a Windows Service or console
• All sinks are supported
• Configuration-driven with support for re-configuration
Benefits
•Increased fault tolerance in case of application crash
•Monitored application does not reference SLAB
•Can monitor multiple processes from a single service.
•Moves the logging overhead from the application to
a separate process (but the overhead is still there!)
Out of Process Service
Features of SLAB
14. // can be run in a unit test
TestMethod
public void
EventSourceAnalyzer AExpenseEvents
// will verify correctness of events
// this example has inconsistent ID and order of parameters
Event
public void int string int
this
Event Source Analyzer
Features of SLAB
15. • Event listener is IObservable.
• Event sinks are IObservers.
• Can leverage Reactive Extensions (Rx) to
filter, pre-process or transform the event
stream before it’s persisted.
Based on Observable
Features of SLAB
17. • Support for ActivityIds
• Ability to capture events from source not publicly available
• Sink for Elasticsearch
• Performance improvements
• Improved extensibility story
• Minor bug fixes
http://aka.ms/slab1_1
SLAB 1.1
What’s Coming Next Now
18. • Evaluate SLAB and adopt it
(search for “slab” in NuGet).
• Read the docs - aka.ms/slab
• Practice the Hands-on Labs &
Quickstarts - aka.ms/el6hols
• Engage with us by providing
feedback and/or submitting contributions - slab.codeplex.com
Call to Action
First, let’s acknowledge the painfulness of logging.We need logging because it helps us to understand what is going on inside of our systems. This is especially true as our system become more sophisticated. It is almost impossible to understand what is going on in a distributed or message-based system without some kind of logging.Let’s also acknowledge that logging its not a particularly interesting topic either. Often, we are only concerned about it because we know that it will be important later. Adding logging to a system can feel a like a distraction from getting the real work done. Since it is annoying to add logging, we often rush through it.The problem is compounded again by the fact that we frequently don’t knowhow we are going to use the logs until we need to use the logs.The result is that our logs are often:InconsistentWithout structureHard to consumeHard to automateOverwhelmingPhoto: http://www.flickr.com/photos/absent/2157057475/
“Semantic” logging is a way to address these problems.We use the word “semantic” to express that our logs have “meaning”. You might also call this approach something like “structured” logging, or perhaps “strongly typed” logging.Even though this talk is about the Semantic Logging Application Block, what I am really interest in is changing the way you think about logging. Creating a structured or semantic log is essentially a different way of thinking about logging.The primary idea is that we deliberately include structure in the entries we log from the very beginning. We are acknowledging from the beginning that we cannot predict exactly how our logs will be consumed.The entries in our log will have more metadata describing what was logged. It also means that we use logging techniques that encourage more discipline as we set up our logging.Our intention with SLAB is to help you “put the effort in the right place”. We want to remove as much of the friction as possible for taking a more structured and semantic approach to your logs.
Let’s take a look at a typical unstructured log.Here we have output from some sort of sorting algorithm. Even though I am calling it unstructured, we should recognize that it is not entirely without structure. We see things like event ids, log levels, et cetera.Nevertheless, it is not structured enough. What we really care about is usually the log message in each entry. The messages are strings that were intended to read by a human. The developer who added this logging had an understanding of what the names in the entries meant. However, it is not clear what those names mean when we look at the log after the fact.The problem is that the relevant information is flattened into the message. Unless you understand how to reserved parse the message you will have difficultly understanding what the message really means.Now this is really a simple example, imagine a more complex and distributed system. The loss context when reading the log messages becomes even more pronounced.
Now let’s take a look at the output from a structured log. Here we have some log entries stored in an Azure table.We still have a message that is intended for humans to read. However, we are also retained that same information in a more structured format. Notice the “5” in the log message. Now notice how value appears in the payload for the log entry.Likewise, in the name example you can see the approver name embedded in the human-readable message, but also broken out into a separate field.This allows us to query by the payload argument without any additional parsing of the human-readable message.
Our team, patterns and practices, experienced a lot of this pain first hand when we were building WASABI, the Auto Scaling Block for Azure. (I must confess that I was not part of that particular team.) We had a personal need to improve our logging.Now, we want to share the things that helped us. Specifically, we want to change the way developers think about logging.We want you to think about the consumption and purpose of the logging at the begging.We allow the appropriate decisions to be made at the appropriate times by explicitly separating:What to logWhen to log itWhere the log is storedMany logging frameworks already abstract away the idea of where the log is stored, so that’s not necessarily something new.
One thing that can be confusing about SLAB is understanding the technologies that are being used and how they related to one another.Event Tracing for Windows, or ETW, is a service provided by the Windows platform. It is a general purpose, high speed tracing facility for Windows. It was first introduced all the way back in Windows 2000. It offers excellent performance, but most .NET developer are not familiar with it because it has been historically hard to use from managed code.In .NET 4.5, the EventSource class was introduced. It eases the authoring experience for tracing events. It is extensible however it only supports ETW out of the box.SLAB builds on top of EventSource, and allows you to provide different destinations for events that are published with EventSource. This means that you can use SLAB without any knowledge of ETW.
Let’s take a more visual look at the technologies involved.First, you will begin by deriving from .NET’s EventSource class. This custom class is where you will define what can be logged for your system. (Remember that we are trying to separate the what, when, and where. The when is defined as the location in our application where we invoke the custom event source.)I haven’t mentioned it yet, but with SLAB you have a the choice about processes the events either in-process or out-of-process. In the in-process case, we don’t really care about ETW at all. We set up some called an ObservableEventListener that takes events published from our custom event source and writes them to the sinks. In this case, the parts that are SLAB are the ObservableEventListener itself and the sinks. This may be a little bit confusing, because ObservableEventListener inherits from EventListener which is part of .NET itself.In the out-of-process story, the custom event source in our primary application is publishing the events to ETW. From ETW, we can access the events in a few different ways such as the Event Log or PerfView.Generally though we have a secondary application running whose purpose is to receive the published events and write them to one or more sinks.
Let’s talk more specifically about the features that SLAB offers. There are five high level features to understand:Sinks – are the destination where log entries will ultimately be persisted.Formatters – provide a pluggable way to format the log entries before they are persistedOut-of-process service – we provide a ready-to-go service for working with the events out-of-processEvent Source Analyzer – for ensuring that we have consistently and properly designed our event sourceObservable Event Listener – allows for interesting filtering of event using Reactive Extensions (Rx)
In the box, we provide sinks for:Azure TablesSQL DatabaseFlat fileRolling flat fileConsoleElasticsearchThe sink for Elasticsearch has just been release (March 28) as part of SLAB 1.1. We’re very excited about it because it is first release since going open source, and we had significant community involvement.I should note that Windows Event Log is not supported by SLAB. However is now natively supported by EventSource.
The formatters are used for sinks such as flat file and console.
In the box we provide both a Windows Service and a console application that can be used to monitor events out-of-process. In both case, all of the sinks are supported. The hosts are configuration driven and there is support for re-configuring on-the-fly.The events in the originating process are sent toETW. The host is a dedicated process, independent of your application, that is used to just to persist the events to different destinations.This has several benefits, however the primary benefit is resiliency. There is increased fault tolerance in case of your application crashing. In addition, there is no need to reference SLAB in the monitored application if you are only using out-of-process. Likewise, it remove some of the logging overhead from your primary application.The output from multiple monitored applications can be sent to a single out-of-process host. There are some downsides to this. It can be slightly more complicated to set up and it is more difficult to work with at development time. We discuss the trades off in the documentation.
There are still some rough edges when using EventSource. For example, you have to specify the event id in both the attribute decorating the logging method as well as in the call to WriteEvent. Likewise, you have to be consistent in the order of the parameters passed to these two methods. Since this can be error prone, SLAB provides the Event Source Analyzer. It allows you to inspect a specific instance of an event source for problems.Here you can see some sample code where we inspect the event source during a unit test.
SLAB’s implementation of Event Listener implements IObservable. Likewise, the included syncs implement IObserver. These interfaces are part of Reactive Extensions, also known as Rx. Since these interfaces are used, this means that we can leverage Rx for filtering and transforming the event stream before we pass it along to a sink.I suspect that there are many of you who are not familiar with Rx. That’s okay. I should also state that there is no hard dependency on Rx unless you want to use it for processing the events. Let me do a quick demonstration of Rx and how it can work with SLAB for these who may not be familiar with it.
Originally, I was going to share “what’s next” with SLAB. However, we just released the 1.1 update for SLAB (March 27).This new release includes support for ActivityIds. Activity Ids are a feature added to Event Source in .NET 4.5.1. They allow you to trace events across a logical transition. This is especially usefully when using something like TPL (Task Parallel Library). I won’t go into details here, there’s more information about Activity Id support in the release notes.In additional to some performance improvements and bug fixes, we have also included an additional sink for Elasticsearch. If you are not familiar with Elasticsearch, it’s a data store with built-in full text search and analysis capabilities. Again, more details are available in the release notes.I would also like to emphasis that this release was largely due to community contributions. All of the projects under the Enterprise Library umbrella are now open sourced under Apache 2.0 and we are welcoming community contributions. If you are interested in contributing, please check http://aka.ms/entlibopen.
If you are interested in SLAB, let me recommend the following:Evaluate SLAB and adopt it (search for “slab” in NuGet).Read the docs - aka.ms/slab Practice the Hands-on Labs &Quickstarts - aka.ms/el6holsEngage with us by providing feedback and/or submitting contributions - slab.codeplex.com We are very interested in your feedback. Now that we are truly open source, you can be very direct with your feedback. You can send us a pull request!