Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
LogHash: le GPS de vos logs de debug - Brown B...
Search
Christopher MANEU
March 18, 2015
Technology
1
220
LogHash: le GPS de vos logs de debug - Brown Bag Lunch @ Deezer HQ
Les logs, c'est le bordel. Non ? Ben plus maintenant :)
https://github.com/cmaneu/loghash-spec
Christopher MANEU
March 18, 2015
Tweet
Share
More Decks by Christopher MANEU
See All by Christopher MANEU
Azure CosmosDB World Tour - ProxyVote
cmaneu
0
43
Answering a simple question with Microsoft Fabric - Azure NL Customer Adoption Community
cmaneu
0
84
Power BI Everywhere - Power BI and SQL Server
cmaneu
0
110
Touraine Tech - On peut écouter 1 fois un utilisateur, ou écouter 1 milliard d'utilisateurs.
cmaneu
0
160
GoL Clinics for Data : Working with Azure Cosmos DB
cmaneu
0
200
GoL Clinics for Data : Exploring the Fundamentals of Azure Cosmos DB
cmaneu
0
180
Listening to your users, from 1 to 1 Billion
cmaneu
0
80
DevOps DDay 2021 - Des projets avec toutes les bonnes pratiques d'infrastructure cloud et du GitOps en un clic
cmaneu
0
64
From IoT data to meaningful data
cmaneu
0
86
Other Decks in Technology
See All in Technology
2025年夏 コーディングエージェントを統べる者
nwiizo
0
170
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
250
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
290
Practical Agentic AI in Software Engineering
uzyn
0
110
サラリーマンの小遣いで作るtoCサービス - Cloudflare Workersでスケールする開発戦略
shinaps
2
450
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
110
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
560
La gouvernance territoriale des données grâce à la plateforme Terreze
bluehats
0
180
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
140
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
150
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
270
Agile PBL at New Grads Trainings
kawaguti
PRO
1
430
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Why Our Code Smells
bkeepers
PRO
339
57k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Facilitating Awesome Meetings
lara
55
6.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Transcript
Let’s talk about logs Baby
None
System.Windows.Data Error: BindingExpression path error: 'CanExecute' property not found on
'Deezer.UI.DelegateCommand' 'Deezer.UI.DelegateCommand' (HashCode=15035499). BindingExpression: Path='PlayCommand.CanExecute' DataItem='Deezer.DeezerAudioViewModel' (HashCode=1101770); target element is 'System.Windows.Controls.Button' (Name=''); target property is 'IsEnabled' (type 'System.Boolean').. System.Windows.Data Error: BindingExpression path error: 'CanExecute' property not found on 'Deezer.UI.DelegateCommand' 'Deezer.UI.DelegateCommand' (HashCode=9915935). BindingExpression: Path='PauseCommand.CanExecute' DataItem='Deezer.DeezerAudioViewModel' (HashCode=1101770); target element is 'System.Windows.Controls.Button' (Name=''); target property is 'IsEnabled' (type 'System.Boolean').. [15:18:22] App : DAVM Update Shuffle repeat status 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Globalization.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Collections.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.IO.ni.dll'. Cannot find or open the PDB file. $$$$$$$$$$$$$$$$$$ HasAccessToDeezer> result=True, request took (ms): 1136 [15:18:22] DeezerRuntimeSettings : UpdateInternetAccess: [forced=False] before=True, after=True ROOT FRAME NAVIGATING (uri='/Login') BOOTSCREEN> ManageUnloggedUser - Time elapsed (ms): 1160 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Linq.ni.dll'. Cannot find or open the PDB file. BOOTSCREEN> END - Time elapsed (ms): 1252<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +++++++++++++++++++++++ PAGE CREATED 'LoginPage' +++++++++++++++++++++++ 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Reflection.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\Data\Programs\{0AC0860A-B966-4004-817C-8AB50BD22511}\Install\microsoft.expression.drawing.DLL'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Runtime.Extensions.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Threading.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Dynamic.Runtime.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Linq.Expressions.ni.dll'. Cannot find or open the PDB file. [15:18:23] App : >>>>>>>>>>>>>>>>>>>>>>>>>> Resetting Navigation Stack (removeHome=True) <<<<<<<<<<<<<<<<<<<<<<<< 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.ServiceModel.Web.ni.dll'. Cannot find or open the PDB file. [15:18:23] DeezerDataProvider : MobileAuthenticate(buildId=WindowsPhone8, version=2.4.0.0, lang=us) 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Reflection.Extensions.ni.dll'. Cannot find or open the PDB file. [15:18:23] HttpDataClient : ExecuteQuery(uri=http://api.deezer.com?&buildId=WindowsPhone8&version=2.4.0.0&operator=Fake GSM Network&lang=us, postData=) 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.ObjectModel.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Xml.XDocument.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'C:\windows\system32\System.Text.RegularExpressions.ni.dll'. Cannot find or open the PDB file. 'TaskHost.exe' (CoreCLR: Silverlight AppDomain): Loaded 'Anonymously Hosted DynamicMethods Assembly'. [15:18:25] DeezerDataProvider : >>>>>>>>>>>>>>>>>>>>>>> DataServerUrl changed -> doing auth on new server. [15:18:25] DeezerDataProvider : MobileAuthenticate(buildId=WindowsPhone8, version=2.4.0.0, lang=us) [15:18:25] HttpDataClient : ExecuteQuery(uri=https://api.deezer.com/? &buildId=WindowsPhone8&version=2.4.0.0&operator=Fake GSM Network&lang=us, postData=)
Donner du sens à ses logs : Semantic logging •TechLogs
? •Microsoft Semantic Loggin AB (EntLib)
Donner du sens à ses logs : Semantic logging [Event(1,
Message = "Application Failure: {0}", Level = EventLevel.Critical, Keywords = Keywords.Diagnostic)] internal void Failure(string message) { this.WriteEvent(1, message); } [Event(2, Message = "Starting up.", Keywords = Keywords.Perf, Level = EventLevel.Informational)] internal void Startup()
Les logs n’ont pas qu’une vie •Debug •Prod / DevOps
•Analytics •Advertising, support, user testing, …
When Markdown ❤ logs It’s a #loghash !
Loghash Manifesto •Un moyen simple de sémantiser ses logs •Commencer
petit, sans friction • Bring your own logs • Bring your own log library • Bring yourself only, not all your team • … •Rendre les logs pertinents sur tout le cycle de vie de l’app
www.loghash.com
Loghash 101 Toute chaîne de caractère est une chaîne Loghash
Loghash 101 - Tagging Un hashtag permet de catégoriser une
ligne de log Starting catalog import of Katy Perry album from EMI Starting #catalog #import of Katy Perry album from EMI
Loghash 101 - Tagging Starting #catalog #import of Katy Perry
album from EMI Starting #catalog.import of Katy Perry album from EMI
Loghash 101 - Tagging #error #catalog.import of Katy Perry album
from EMI failed • #error • #warn • #info • #debug • #trace
Loghash 101 - Identifiers #catalog.import started from @provider:emi for @artist:"Katy
Perry"
Loghash 101 – Object dumps Google Play callback: #inapppurchase @userid:42
@{"iap-product-id":42,"success":true}
Loghash 101 – Secure content User license renewed @$userEncryptionKey:"sdhq238hfkqsd82hf="
Loghash 101 – Mais encore… • Compteurs (Graphite ? Kibana
?) @{"__count":"user.offlinealbums","v":1} • Timings @{"__timing":"account creation","d":323} • Progressions @{"__progress":"demo","p":0.3721} • Custom viewers @{"__e":"android.activity.lifecycle","d":{"name":"feedactivit y","status":"created"}}
What’s next ? •Logstash ingestion plugin (log > Kibana) •Complete
JS parser lib •Complete C# parser lib •Web interface •Logger libs •Visual Studio plugin, NSLogger app, ADB tool, …
Qui utilise ce machin là ?
Catalog team @date:"2015-03-17 14:43:11" #info #album @id:9727118 #publish @date:"2015-03-17 14:43:11"
#info #track @id:68732528 #publish @date:"2015-03-17 14:43:11" #warn #track @id:68732528 #waiting @date:"2015-03-17 14:43:11" #error #album @id:9727118 #exception @message:"THIS IS ERROR MESSAGE !" @date:"2015-03-17 14:43:11" #info #album @id:9727118 #publish @date:"2015-03-17 14:50:38" #info #track @id:101038241 #skip @date:"2015-03-17 14:50:38" #info #track @id:101037571 #skip
Qui utilise ce machin là ?
Avant command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M
script.php --debug -- name='catalog/import/indexer' --provider-id='2' --host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_indexer_2015-03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/indexer' --provider-id='3' --host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_indexer_2015-03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/parser' --delivery-id='143081' --provider-id='2' --host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_parser_2015-03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/simulatevdo' --delivery-id='143081' --provider-id='2' -- host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_simulatevdo_2015- 03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/parser' --delivery-id='143091' --provider-id='2' --host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_parser_2015-03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/simulatevdo' --delivery-id='143091' --provider-id='2' -- host='172.16.1.103' --port='11112' >> /data/tmp/script_server/logs/romain_simulatevdo_2015- 03-18.log & command> nice -n 20 php -c ~/php.ini -d memory_limit=4000M script.php --debug -- name='catalog/import/parser' --delivery-id='143101' --provider-id='2' --host='172.16.1.103'
Après @date:"2015-03-07 23:01:29" #indexer @{"provider_id":1,"host":"10.101.1.127","port":11111} @date:"2015-03-07 23:56:48" #importer @{"delivery_id":39654811,"provider_id":1,"host":"10.101.1.127","port":111 11}
@date:"2015-03-07 23:56:55" #importer @{"delivery_id":39654821,"provider_id":1,"host":"10.101.1.127","port":111 11} @date:"2015-03-07 23:56:57" #importer @{"delivery_id":39654831,"provider_id":1,"host":"10.101.1.127","port":111 11} @date:"2015-03-10 04:20:14" #indexer @{"provider_id":548,"host":"10.101.1.127","port":11111} @date:"2015-03-10 04:20:14" #indexer @{"provider_id":552,"host":"10.101.1.127","port":11111} @date:"2015-03-10 04:20:14" #indexer @{"provider_id":554,"host":"10.101.1.127","port":11111}
None
None
Qui utilise ce machin là ? •Deezer ! • Windows
Phone • Equipe Catalogue • Vous tous dès cet aprèm • (moi, dans mes projets perso)
Questions ?