2. Auracen's XE guide
Auracen wrote up an awesome guide to the XE at PlusHeal.com
and has graciously allowed me to repost it here for your perusal. The original may be found at the PlusHeal.com forums
as this version may lag behind a little on updates.
World of Logs - Expression Editor
I discovered a fun little tool in World of logs recently, the Expression Editor. It can go beyond what you normally can see from World of Logs standard dps/hps reports. It is very powerful, but has taken me a bit to start understanding the syntax and building useful queries. I thought I'd write up some documentation on how to use it since I haven't found much yet.
This guide is a work in progress, and constructive feedback is always welcomed. If there is anything I have missed or any pieces that are hard to understand, feel free to ask questions and I can add to or explain complicated pieces.
Go to the fight or raid you want to analyze, and then under the drop down menu where you would normally choose Damage Done, or Healing done, etc, choose Expression Editor
. If you choose one specific fight, your query will likely return faster since it has less of the combat log to look through than just choosing the entire raid. This will also eliminate any unwanted data such as when you are just clearing trash mobs.
Once at the Expression Editor screen, you will be given a query text box. You will enter an expression in the query you want, and hit run. World of Logs will return any line of the combat log that qualifies on your query.
I'll start with an example... I play a restoration druid and let's say I want to know how often I cast rejuvenation on a target that is already effected by rejuvenation (This can be thought of as refreshing a DoT before the last tick... a loss of HPS/DPS). This is actually pretty easy to do with the expression editor, but would be virtually impossible to find out through looking elsewhere on worldoflogs. So, to implement this example I would enter the following into the expression editor:
Code: Select all
sourceName = "Auracen" and fullType = SPELL_AURA_REFRESH and healSpell = "Rejuvenation"
What this is telling the editor is give me any event where the source of the spell/ability is Auracen
, the type of action is SPELL_AURA_REFRESH, and the spell cast is Rejuvenation. Running this gives me a little report, like this:
The and/or logic can be kind of confusing if you haven't done much programming... I And
everything together, so that all of those qualities are required. If you want one condition or another, you use the word or
. So lets say I want to see refreshes on Rejuvenation Or
Regrowth. I still only want to see spells cast by "Auracen"
and I still want to only see spells cast with a fullType
so when dealing with those clauses I need to use the and
operator. However no line will qualify if I say I want lines where the spell is Rejuvenation and Regrowth, so I need to use the or
qualifier there. It will look something like this:
Code: Select all
sourceName = "Auracen"
and fullType = SPELL_AURA_REFRESH
and (healSpell = "Rejuvenation" or healSpell = "Regrowth)
Notice that I have to use the ( )'s around Rejuvenation or
Regrowth so that the query knows the order of operations. Without the parenthesis it would return (All spells cast by Auracen, that refreshed an aura, and was rejuvenation) or any spellcast of Regrowth. Which is not what we are looking for.
Building more complex queries
Another example... something slightly more complex. Let's build a report that will essentially show us who has been messing up on the Sindragosa encounter. We will qualify on any line in the log file where someone got more than 5 stacks of Mystic Buffet
, and 6 stacks of Instability
or Chilled to the bone
. But on Unchained Magic only, lets ignore the mages and Shadow priests (In my guild Kouji, Trippz, and Heartfrost) since they can Ice Block or Dispersion it. We are also only concerned about players... not pets, so adding the and targetType = "Player"
will make our query slightly cleaner.
Code: Select all
(spell = "Mystic Buffet" and amount > 5) or
(spell = "Instability" or spell = "Chilled to the Bone")
and amount > 6 and fullType = SPELL_AURA_APPLIED_DOSE
and (targetName != "kouji" and targetName != "trippz" and targetName != "heartfrost")
and targetType = "Player"
This is going to return something like:
There is a formal grammar defined for the language, as well as identifiers and constants that you can use when building expressions. Constants would be things like spell, amount, targetName
. They can all be found here
In order to build your queries, looking through the constants will be required as any query will hinge upon what is available by the editor. Not everything is possible to find using the expression editor, basic rule would be if you cannot manually search the combat logs to find what you are looking for, the expression editor will not do it either. The editor is basically a way to simplify searching thousands of lines in the log file for the one piece you are interested in.
A final tip is if you are having trouble getting a large expression to work, break it up into smaller chunks... once you get the chunks working, piece it back together.