[{"data":1,"prerenderedAt":580},["ShallowReactive",2],{"page:index-navigation":3,"home:service-page:footer":9,"page:help-pages":244,"page:service-page":268,"technical-blog-page-content":314,"technical-blog-post-observability-in-production-writing-effective-logs-and-diagnosing-issues":341,"technical-blog-author-observability-in-production-writing-effective-logs-and-diagnosing-issues":317},{"helpBlocks":4},[5,6,7,8],"advice","projects","people","support",{"groupedServices":10},[11],{"title":12,"groups":13},"Services",[14,55,96,135,172,208],{"title":15,"slug":16,"icon":17,"subtitle":18,"services":19},"Strategy","strategy","lucide:compass","Shaping AI and digital transformation strategies that help organisations prioritise investment, define practical roadmaps, strengthen governance, and build the operating models needed to adopt change with confidence.",[20,27,34,41,48],{"slug":21,"title":22,"subtitle":23,"description":24,"image":25,"icon":26},"ai-digital-strategy","AI & Digital Strategy","Supporting organisations through AI adoption and digital transformation","Assessing where AI and digital can deliver the greatest value, building the business case for investment and developing a prioritised roadmap grounded in what your organisation can deliver at pace and at scale.","\u002Fimg\u002Fservice-page\u002Fgen-ai.jpg","lucide:sparkles",{"slug":28,"title":29,"subtitle":30,"description":31,"image":32,"icon":33},"ai-digital-delivery","AI & Digital Delivery","Delivering strategic roadmaps to for digital and AI-enabled change","Providing the engineering, data science and AI capability needed to take complex AI and digital programmes from validated strategy through to successful delivery, for organisations that need both the technical depth and the delivery structure to execute consistently.","\u002Fimg\u002Fservice-page\u002Freporting.jpg","lucide:map",{"slug":35,"title":36,"subtitle":37,"description":38,"image":39,"icon":40},"ai-native-operating-models","AI Native Operating Models","Designing operating models that embed AI into teams, services and delivery","Designing and delivering AI-native operating model transformations across organisational structure, processes, workforce and technology, combining hands-on AI delivery experience with consulting expertise to deliver transformations focused on operational reality.","\u002Fimg\u002Fservice-page\u002Fcloud-design.jpg","lucide:building-2",{"slug":42,"title":43,"subtitle":44,"description":45,"image":46,"icon":47},"ai-data-maturity","AI & Data Maturity","Assessing organisational readiness and capability across AI and data","Delivering independent, evidence-based assessments of AI and data capability across people, process, technology and governance, identifying the most significant capability gaps and building a structured, prioritised plan to address them.","\u002Fimg\u002Fservice-page\u002Fanalytics.jpg","lucide:bar-chart-3",{"slug":49,"title":50,"subtitle":51,"description":52,"image":53,"icon":54},"governance-risk-security","Governance, Risk & Security","Establishing controls and frameworks for responsible, secure AI adoption","Helping organisations manage governance, risk and security across AI and digital programmes, from establishing AI governance frameworks and responsible AI policies to regulatory compliance and cyber security advisory.","\u002Fimg\u002Fservice-page\u002Fcloud-security.jpg","lucide:shield-check",{"title":56,"slug":57,"icon":58,"subtitle":59,"services":60},"Engineering","engineering","lucide:cog","Building large-scale, complex software platforms - from enterprise legacy modernisation, to greenfield projects, we deliver solutions that automate, streamline and simplify processes, meeting the needs of today and the future.",[61,68,75,82,89],{"slug":62,"title":63,"subtitle":64,"description":65,"image":66,"icon":67},"software-development-company-uk","Software Development","Engineering complex, mission critical software platforms","Designing and delivering large-scale, complex software platforms for enterprise and public sector organisations across industries, from initial discovery and design through to deployment and long-term support.","\u002Fimg\u002Fservice-page\u002Fsoftware-development.jpg","lucide:code",{"slug":69,"title":70,"subtitle":71,"description":72,"image":73,"icon":74},"ai-assisted-engineering","AI-Assisted Engineering","Accelerating software delivery with AI-enabled engineering practices","Embedding AI tools and practices across engineering teams to accelerate delivery, improve code quality and build lasting AI capability, from AI-assisted code generation and review to AI-powered testing and deployment automation.","\u002Fimg\u002Fservice-page\u002Fai-assisted-software-development.jpg","lucide:cpu",{"slug":76,"title":77,"subtitle":78,"description":79,"image":80,"icon":81},"systems-integration","Systems Integration","Integrating systems to operate as a single framework","Connecting core business systems so they operate as a single, coherent framework, covering ERP, CRM, finance and reporting platforms, with real-time data accuracy and the audit trails needed to manage complex enterprise environments reliably.","\u002Fimg\u002Fservice-page\u002Fsystem-intergration.jpg","lucide:git-merge",{"slug":83,"title":84,"subtitle":85,"description":86,"image":87,"icon":88},"mobile-development","Mobile Development","Delivering performant, scalable and robust user-driven mobile applications","Delivering performant, scalable and user-driven mobile applications for enterprise and public sector organisations, from cross-platform apps and PWAs to native iOS and Android solutions built for complex operational environments.","\u002Fimg\u002Fservice-page\u002Fmobile-development.jpg","lucide:smartphone",{"slug":90,"title":91,"subtitle":92,"description":93,"image":94,"icon":95},"front-end-development-company","Front End Development","Building intuitive and scalable user-focused digital experiences","Designing and building intuitive, accessible and performant front end applications, from UX strategy and prototyping through to full delivery, for organisations where digital experience is central to how they serve customers and teams.","\u002Fimg\u002Fservice-page\u002Ffront-end-software-development.jpg","lucide:layout",{"title":97,"slug":98,"icon":99,"subtitle":100,"services":101},"Testing","testing","lucide:check-circle","Helping organisations assure quality across platforms, products and services - from defining test approaches to automating validation, performance assurance and security-focused testing.",[102,108,115,122,129],{"slug":103,"title":104,"subtitle":105,"description":106,"image":32,"icon":107},"testing-strategy","Test Strategy","Defining scalable test approaches aligned to delivery goals and risk","Defining, auditing and improving software testing strategies for enterprise and public sector organisations, covering functional and non-functional testing, automation, tooling and team capability in a single coherent framework.","lucide:clipboard-check",{"slug":109,"title":110,"subtitle":111,"description":112,"image":113,"icon":114},"automated-testing","Automated Testing","Building automated test suites to improve quality, speed and confidence","Designing and delivering automated testing frameworks across end-to-end, API and performance testing, built around your technology stack and embedded directly into delivery pipelines for reliable, maintainable coverage at pace.","\u002Fimg\u002Fservice-page\u002Fdevops.jpg","lucide:bot",{"slug":116,"title":117,"subtitle":118,"description":119,"image":120,"icon":121},"performance-load-testing","Performance & Load Testing","Validating system performance, resilience and scalability under demand","Validating system performance under real-world demand for organisations where reliability, scalability and speed are business-critical, from pre-release testing and bottleneck identification through to continuous performance testing in delivery pipelines.","\u002Fimg\u002Fservice-page\u002Fcloud-native.jpg","lucide:gauge",{"slug":123,"title":124,"subtitle":125,"description":126,"image":127,"icon":128},"ai-testing-and-validation","AI Testing & Validation","Testing AI systems for quality, safety, reliability and expected outcomes","Validating AI models and systems across accuracy, reliability and deployment readiness, from pre-deployment model evaluation and independent AI assurance through to production monitoring and LLM red teaming.","\u002Fimg\u002Fservice-page\u002Fprototype.jpg","lucide:flask-conical",{"slug":130,"title":131,"subtitle":132,"description":133,"image":53,"icon":134},"security-testing","Security Testing","Identifying vulnerabilities and strengthening confidence in system security","Identifying and addressing security vulnerabilities across software systems, infrastructure, development practices and AI systems, covering penetration testing, threat modelling, vulnerability assessment and LLM red teaming.","lucide:shield",{"title":136,"slug":137,"icon":138,"subtitle":139,"services":140},"Data","data","lucide:database","Turning data into a valuable asset - from building centralised data platforms to delivering clear, accessible reporting and analytics, we enable teams to make faster, more informed decisions based on trusted data.",[141,146,152,159,165],{"slug":142,"title":143,"subtitle":144,"description":145,"image":32,"icon":47},"data-visualisation-consultancy","Data Visualisation & Reporting","Delivering custom reporting for data-driven decision making","Designing and delivering interactive dashboards, custom reports and real-time analytics aligned to your KPIs, giving operational and strategic teams the visibility they need to make informed, data-driven decisions.",{"slug":147,"title":148,"subtitle":149,"description":150,"image":46,"icon":151},"data-analytics-company","Data Analytics","Uncovering actionable insights for data-driven transformation","Analysing large-scale, complex datasets to surface trends, correlations and forecasts that inform decisions across sales, supply chain, operations and strategic planning, from predictive analytics to big data analysis.","lucide:line-chart",{"slug":153,"title":154,"subtitle":155,"description":156,"image":157,"icon":158},"data-migration-services","Data Migration","Delivering large migrations across architectures and environments","Delivering large-scale, complex data migrations across cloud, database and application systems, ensuring data is clean, accurate and reliable throughout transition with no disruption to operations or loss of data fidelity.","\u002Fimg\u002Fservice-page\u002Fmigration.jpg","lucide:database-backup",{"slug":160,"title":161,"subtitle":162,"description":163,"image":164,"icon":138},"data-engineering-services","Data Engineering","Engineering pipelines to consolidate, process and aggregate data","Building the scalable data pipelines, storage architectures and integration frameworks that consolidate, process and aggregate data across the organisation, providing the foundations for effective analytics and decision making.","\u002Fimg\u002Fservice-page\u002Fdata-engineering.jpg",{"slug":166,"title":167,"subtitle":168,"description":169,"image":170,"icon":171},"data-platform-consulting","Enterprise Data Products","Designing, delivering and optimising enterprise data platforms to provide unified data foundations","Designing, implementing and optimising enterprise data platforms using Snowflake, Databricks and Apache Spark, delivering unified, governed data foundations that support analytics, self-service insights and AI capability at scale.","\u002Fimg\u002Fservice-page\u002Fenterprise-data-products.jpg","lucide:layers",{"title":173,"slug":174,"icon":175,"subtitle":176,"services":177},"AI","ai","lucide:brain","Guiding organisations through the practical application of AI - from early experimentation to production-grade systems, we create solutions that improve services and enable organisations to make decisions better, faster and at scale.",[178,183,190,195,202],{"slug":179,"title":180,"subtitle":181,"description":182,"image":127,"icon":128},"ai-consultancy","Prototypes and PoCs","Validating AI opportunities through rapid experimentation and prototyping","Validating AI concepts through rapid prototyping and proof of concept delivery across language and conversation, vision and detection, and prediction and optimisation use cases, helping organisations de-risk AI investment before committing to full development.",{"slug":184,"title":185,"subtitle":186,"description":187,"image":188,"icon":189},"ai-machine-learning-company","Production AI","Designing and delivering production-ready AI solutions at scale","Taking validated AI models into production for enterprise and public sector organisations, addressing model performance, integration, MLOps and ongoing monitoring to ensure AI systems perform consistently in live environments over the long term.","\u002Fimg\u002Fservice-page\u002Fconcept-to-delivery.jpg","lucide:rocket",{"slug":191,"title":192,"subtitle":193,"description":194,"image":25,"icon":114},"agentic-ai","Agentic AI","Building agent-based AI systems that can reason, act and automate","Building, running and supporting agentic AI systems for enterprise and public sector organisations, executing multi-step workflows, coordinating across systems and completing complex tasks with minimal human intervention.",{"slug":196,"title":197,"subtitle":198,"description":199,"image":200,"icon":201},"ai-machine-learning-operations-consulting","AI Cloud Platforms\u002FServices","Providing platforms and services to build, deploy and scale trusted AI","Building, deploying and scaling AI solutions across Azure, AWS and Google Cloud, from developing solutions using pre-built APIs and managed AI services through to foundation model customisation and cloud AI optimisation.","\u002Fimg\u002Fservice-page\u002Fai-cloud.jpg","lucide:cloud-cog",{"slug":203,"title":204,"subtitle":205,"description":206,"image":207,"icon":175},"ai-machine-learning-consulting","Data Science and ML","Building data science and machine learning solutions tailored to real-world challenges","Delivering data science and machine learning solutions for enterprise and public sector organisations across forecasting and prediction, insight and discovery, and optimisation and recommendation use cases.","\u002Fimg\u002Fservice-page\u002Fml.jpg",{"title":209,"slug":210,"icon":211,"subtitle":212,"services":213},"Cloud","cloud","lucide:cloud","Supporting organisations in building secure, scalable cloud environments - whether migrating systems, modernising platforms, or optimising existing infrastructure, we focus on delivering cloud solutions that improve performance, resilience, and cost-efficiency.",[214,220,227,233,239],{"slug":215,"title":216,"subtitle":217,"description":218,"image":39,"icon":219},"cloud-architecture-consulting","Cloud Architecture & Design","Designing cloud solutions optimised for resilience and scale","Designing and architecting robust, scalable cloud solutions across public and hybrid cloud environments, from cloud strategy and planning through to implementation and ongoing optimisation, using Well-Architected Frameworks and infrastructure-as-code techniques.","lucide:network",{"slug":221,"title":222,"subtitle":223,"description":224,"image":225,"icon":226},"cloud-migration-consulting","Cloud Adoption & Migration","Migrating to cloud infrastructures to enhance accessibility, performance and scalability","Delivering seamless migration of systems, data and workloads to optimal cloud platforms with minimal disruption to operations, across Azure, AWS and Google Cloud, from initial assessment and adoption planning through to post-migration optimisation and support.","\u002Fimg\u002Fservice-page\u002Fcloud-adoption.jpg","lucide:cloud-upload",{"slug":228,"title":229,"subtitle":230,"description":231,"image":120,"icon":232},"cloud-application-development","Cloud Native Solutions","Building scalable and resilient cloud native solutions rapidly","Designing and building highly scalable, resilient cloud native applications that fully harness the advantages of dynamic cloud environments, from microservices architecture and containerisation through to automated CI\u002FCD pipelines and continuous delivery.","lucide:boxes",{"slug":234,"title":235,"subtitle":236,"description":237,"image":113,"icon":238},"devops-consulting-services","DevOps & Pipelines","Embedding automation through DevOps for continuous integration, delivery and deployment","Transforming how software is delivered and released through optimised CI\u002FCD pipelines, infrastructure-as-code and DevOps culture, enabling teams to ship updates frequently, reliably and at pace across complex enterprise and public sector programmes.","lucide:workflow",{"slug":240,"title":241,"subtitle":242,"description":243,"image":53,"icon":54},"cloud-security-consulting","Cloud Security","Securing cloud environments through architecture, automation and optimisation","Securing cloud environments and workloads through risk-based security architecture, automated controls and continuous monitoring, helping organisations adopt cloud securely while meeting compliance obligations across Azure, AWS and Google Cloud.",[245,250,256,262],{"path":246,"title":247,"blockDescription":248,"icon":74,"bgColour":249},"\u002Fhelp\u002Fadvice","Advise","Offering strategic advice, technology consultancy and support on end-to-end digital transformation.","#1174d6",{"path":251,"title":252,"blockDescription":253,"icon":254,"bgColour":255},"\u002Fhelp\u002Fpeople","Collaborate","Augment your internal teams with skilled, experienced specialists to accelerate delivery and reduce risk.","lucide:users","#F4743B",{"path":257,"title":258,"blockDescription":259,"icon":260,"bgColour":261},"\u002Fhelp\u002Fprojects","Deliver","Combining domain and technology expertise to build digital products and services at speed and scale.","lucide:kanban-square","#348d69",{"path":263,"title":264,"blockDescription":265,"icon":266,"bgColour":267},"\u002Fhelp\u002Fsupport","Maintain","Managed support and hosting services to keep business-critical platforms secure, resilient and scalable.","mdi:gauge","#A93F55",{"groupedServices":269},[270],{"title":12,"groups":271},[272,279,286,293,300,307],{"title":15,"slug":16,"icon":17,"subtitle":18,"services":273},[274,275,276,277,278],{"slug":21,"title":22,"subtitle":23,"description":24,"image":25,"icon":26},{"slug":28,"title":29,"subtitle":30,"description":31,"image":32,"icon":33},{"slug":35,"title":36,"subtitle":37,"description":38,"image":39,"icon":40},{"slug":42,"title":43,"subtitle":44,"description":45,"image":46,"icon":47},{"slug":49,"title":50,"subtitle":51,"description":52,"image":53,"icon":54},{"title":56,"slug":57,"icon":58,"subtitle":59,"services":280},[281,282,283,284,285],{"slug":62,"title":63,"subtitle":64,"description":65,"image":66,"icon":67},{"slug":69,"title":70,"subtitle":71,"description":72,"image":73,"icon":74},{"slug":76,"title":77,"subtitle":78,"description":79,"image":80,"icon":81},{"slug":83,"title":84,"subtitle":85,"description":86,"image":87,"icon":88},{"slug":90,"title":91,"subtitle":92,"description":93,"image":94,"icon":95},{"title":97,"slug":98,"icon":99,"subtitle":100,"services":287},[288,289,290,291,292],{"slug":103,"title":104,"subtitle":105,"description":106,"image":32,"icon":107},{"slug":109,"title":110,"subtitle":111,"description":112,"image":113,"icon":114},{"slug":116,"title":117,"subtitle":118,"description":119,"image":120,"icon":121},{"slug":123,"title":124,"subtitle":125,"description":126,"image":127,"icon":128},{"slug":130,"title":131,"subtitle":132,"description":133,"image":53,"icon":134},{"title":136,"slug":137,"icon":138,"subtitle":139,"services":294},[295,296,297,298,299],{"slug":142,"title":143,"subtitle":144,"description":145,"image":32,"icon":47},{"slug":147,"title":148,"subtitle":149,"description":150,"image":46,"icon":151},{"slug":153,"title":154,"subtitle":155,"description":156,"image":157,"icon":158},{"slug":160,"title":161,"subtitle":162,"description":163,"image":164,"icon":138},{"slug":166,"title":167,"subtitle":168,"description":169,"image":170,"icon":171},{"title":173,"slug":174,"icon":175,"subtitle":176,"services":301},[302,303,304,305,306],{"slug":179,"title":180,"subtitle":181,"description":182,"image":127,"icon":128},{"slug":184,"title":185,"subtitle":186,"description":187,"image":188,"icon":189},{"slug":191,"title":192,"subtitle":193,"description":194,"image":25,"icon":114},{"slug":196,"title":197,"subtitle":198,"description":199,"image":200,"icon":201},{"slug":203,"title":204,"subtitle":205,"description":206,"image":207,"icon":175},{"title":209,"slug":210,"icon":211,"subtitle":212,"services":308},[309,310,311,312,313],{"slug":215,"title":216,"subtitle":217,"description":218,"image":39,"icon":219},{"slug":221,"title":222,"subtitle":223,"description":224,"image":225,"icon":226},{"slug":228,"title":229,"subtitle":230,"description":231,"image":120,"icon":232},{"slug":234,"title":235,"subtitle":236,"description":237,"image":113,"icon":238},{"slug":240,"title":241,"subtitle":242,"description":243,"image":53,"icon":54},{"id":315,"title":316,"author":317,"blogTags":317,"body":318,"customExcerpt":317,"date":317,"description":322,"excerpt":317,"extension":325,"h1":326,"image":317,"meta":327,"navigation":328,"path":329,"readingStats":330,"seo":335,"stem":339,"__hash__":340},"technicalBlogPage\u002Ftechnical-blog-page.md","Technical Blog Page",null,{"type":319,"value":320,"toc":321},"minimark",[],{"title":322,"searchDepth":323,"depth":323,"links":324},"",2,[],"md","Technical insights, stories and opinions from our team of consultants, analysts, developers and testers.",{},true,"\u002Ftechnical-blog-page",{"text":331,"minutes":332,"time":333,"words":334},"1 min read",0.29,17400,58,{"title":336,"description":337,"keywords":338},"Technology Insights | Audacia Digital Transformation","Technical insights, stories and opinions from leading software development company Audacia's teams of consultants, analysts, developers and testers.","Digital transformation technology, Technology blog, Technology insights, software development blog, software engineering blog","technical-blog-page","XD1gWfEur9Mu64WptQ5pF-e7Ej60LGiq7sRC58wOAeQ",{"id":342,"title":343,"author":317,"blogTags":344,"body":348,"customExcerpt":564,"date":565,"description":353,"excerpt":317,"extension":325,"h1":317,"image":566,"meta":567,"navigation":328,"path":568,"readingStats":569,"seo":574,"stem":578,"__hash__":579},"technicalBlog\u002Ftechnical-blog\u002Fobservability-in-production-writing-effective-logs-and-diagnosing-issues.md","Observability in Production: Writing Effective Logs and Diagnosing Issues ",[345,346,347],"Monitoring Dependencies","DevOps","Performance",{"type":319,"value":349,"toc":552},[350,354,357,362,365,370,373,376,380,383,387,390,394,397,401,405,408,411,415,418,421,425,428,432,435,440,447,450,453,456,460,466,472,475,478,481,485,488,491,494,497,500,504,507,510,532,535,539,542,545],[351,352,353],"p",{},"When something goes wrong in a production environment, there are no breakpoints, no debugger and no way to step through code interactively and inspect state. The only evidence available is what the system was deliberately built to record. Observability means leaving a clear, queryable trace of what a system did, in what order and why, so that issues can be diagnosed without needing to reproduce them locally.",[351,355,356],{},"Logging is the foundation of that trace. However, having logs is not the same as having useful logs. This article covers how to write application logs that support diagnosis, how to query them effectively using examples from Azure Application Insights and what to avoid.",[358,359,361],"h2",{"id":360},"what-makes-a-log-message-useful","What makes a log message useful?",[351,363,364],{},"The most common logging mistake is only recording that something went wrong. A log that says \"command failed\" tells an engineer very little. Useful logs record what happened at each stage of a process.",[366,367,369],"h4",{"id":368},"log-entry-points-exit-points-and-branching-conditions","Log entry points, exit points, and branching conditions",[351,371,372],{},"The three most valuable places to add a log statement are: when a process starts, when it ends and when it reaches a decision point. Entry logs confirm that a path was entered at all. Exit logs confirm what the outcome was. Branching logs - placed before the condition is evaluated, not inside each branch - record the state that determined which path was taken.",[351,374,375],{},"A log that only exists inside a successful branch will be entirely absent if the process takes an unexpected route. Without a log before the condition, there is no way to know whether the branch was ever reached.",[366,377,379],{"id":378},"include-identifiers-not-just-messages","Include identifiers, not just messages",[351,381,382],{},"Consistently including a relevant entity identifier such as a payment or user ID in log messages pays off over time. It becomes possible to search that identifier across the entire log history and reconstruct a complete picture of where that entity has been in the system. Without it, a sequence of log messages from different commands can be impossible to connect.",[366,384,386],{"id":385},"log-the-data-that-drives-decisions","Log the data that drives decisions",[351,388,389],{},"If a command branches based on a flag value, a query result or a configuration setting then log those values. In one diagnostic case at Audacia, an unexpected outcome in a client project came down to a third-party liability field in the data setup that had been overlooked. Logging the values involved in the branching condition made that visible. Without it, the team was working from the assumption that a code defect was to blame.",[366,391,393],{"id":392},"write-messages-for-engineers-not-for-end-users","Write messages for engineers, not for end users",[351,395,396],{},"Log messages need to be specific, unique and descriptive enough for an engineer to locate the relevant code with a text search. If two exit points in the same command share the same message, it is impossible to determine which one fired. A unique, descriptive message - even a long one - is easier to work with than a tidy but ambiguous one.",[358,398,400],{"id":399},"what-should-be-left-out","What should be left out?",[366,402,404],{"id":403},"sensitive-data","Sensitive data",[351,406,407],{},"Logs should not contain personal data unless there is a clear and justified reason. This is partly a compliance concern and partly a practical one: logging an entire object graph, or the full result set of a database  query with navigation properties included, can surface data from related tables that was not anticipated. The principle is to log the minimum necessary to support diagnosis.",[351,409,410],{},"Project teams may have their own definitions of what counts as sensitive, which should be agreed with the client.",[366,412,414],{"id":413},"over-logging","Over-logging",[351,416,417],{},"Log volume has real consequences. For example, a background function that generates high log output and runs frequently could cause any daily cap to be exceeded in a short span of time. Until this is noticed and remedied, logs will fail to reach the monitoring environment at all. This kind of gap is particularly problematic because it is silent - no error is surfaced, logs simply stop appearing.",[351,419,420],{},"Log levels exist to manage this. Informational is appropriate for general application events. Debug and Trace are intended for lower-level detail and may not be active in all environments or forwarded to the observability platform depending on configuration. Using the right level keeps ingestion costs predictable and ensures that information-level logs remain meaningful.",[366,422,424],{"id":423},"string-interpolation-vs-structured-logging","String interpolation vs. structured logging",[351,426,427],{},"Logging a message using string interpolation - embedding a value directly into the message text - produces a flat string. Most observability platforms can’t filter, facet or query that value as a property. Using a templated message with a named placeholder (e.g. \"Found configuration for customer {CustomerId}\") causes the logging framework to capture the value as a structured property, which observability platforms can then store and query on the log event. The difference becomes significant when filtering across large volumes of logs.",[358,429,431],{"id":430},"how-to-diagnose-an-issue-using-azure-app-insights","How to diagnose an issue using Azure App Insights",[351,433,434],{},"Knowing how to read logs is as important as knowing how to write them. Azure Application Insights provides several routes into the data; choosing the right one speeds up diagnosis considerably. Note that though Azure Application Insights is used as an example here, similar functionality is available in most observability platforms.",[436,437,439],"h3",{"id":438},"use-the-operation-id-to-reconstruct-a-timeline","Use the operation ID to reconstruct a timeline",[351,441,442],{},[443,444],"img",{"alt":445,"src":446,"title":445},"App Insights operation ID timeline","\u002Fimg\u002Ftechnical-blog\u002Ftechmeet3-observability-1.png",[351,448,449],{},"Every request or invocation in App Insights is associated with an operation ID - a correlation identifier that is automatically propagated across components if the system is configured correctly. Once an operation ID is found on any log entry, it can be used to query every trace, request and exception associated with that specific invocation.",[351,451,452],{},"This is particularly powerful for event-driven or multi-component architectures. If an API request triggers a message on a service bus, which is picked up by a separate component, the operation ID should carry through the entire chain - making it possible to follow a single logical operation across multiple services.",[351,454,455],{},"The operation ID is really just App Insights' implementation of a broader concept: the correlation ID. Different platforms use different names for the same idea - trace ID, request ID, correlation ID - but the principle holds everywhere: a single identifier generated once and passed through every downstream call, so a request can be traced across components without manual reconstruction. It's increasingly treated as a baseline expectation as architectures become more disconnected.",[436,457,459],{"id":458},"kql-querying-app-insights-directly","KQL: querying App Insights directly",[351,461,462],{},[443,463],{"alt":464,"src":465,"title":464},"Illustration of Azure Application Insights log querying interface","\u002Fimg\u002Ftechnical-blog\u002Ftechmeet3-observability-2-big-png.png",[351,467,468],{},[469,470,471],"em",{},"Illustration of Azure Application Insights log querying interface. Layout and query syntax are representative.",[351,473,474],{},"Azure App Insights supports Kusto Query Language (KQL), which is broadly similar to SQL in its approach. KQL queries run against entity type tables - traces, requests, exceptions, dependencies - and can be combined using unions to pull a complete picture of an operation.",[351,476,477],{},"For those unfamiliar with KQL, App Insights also provides a simple mode query builder that generates KQL from filter selections. Switching to KQL mode after building a query in simple mode is a practical way to learn the syntax incrementally.",[351,479,480],{},"Clicking into a result from Transaction search or Failures opens the end-to-end transaction details view, which provides a hierarchy and waterfall of all events associated with a request, including the duration of individual SQL calls and downstream dependencies. This is useful for understanding the order and relative timing of events, not just whether they succeeded.",[358,482,484],{"id":483},"alerting-building-on-a-foundation-of-good-logs","Alerting: building on a foundation of good logs",[351,486,487],{},"Alerting is the next layer above logging, and its effectiveness depends directly on log quality.",[351,489,490],{},"Threshold-based alerting - triggering a notification when more than a certain number of exceptions occur within a short window - avoids noise from isolated domain exceptions while surfacing genuine system problems. The threshold needs to be calibrated to the application; some systems throw domain exceptions as part of normal operation, and alerting on every exception would produce constant false positives.",[351,492,493],{},"Absence-of-log alerting is a complementary pattern. If a background job is expected to run every five minutes and log a known entry message, an alert can be configured to fire if that message has not appeared within ten minutes. This catches failures that produce no exception.",[351,495,496],{},"Trend-based alerting goes further still: rather than responding to a threshold being crossed, it detects gradual degradation. A background job whose runtime is slowly increasing may not be failing, but it may be worth investigating before it does.",[351,498,499],{},"Alerting may also be relevant outside the development team. Depending on how a system is managed, a DevOps function or a client managing the service may need to be included in alert routing.",[358,501,503],{"id":502},"audacias-approach-to-application-logging","Audacia's approach to application logging",[351,505,506],{},"Audacia applies a consistent set of logging principles across its projects, adapted where necessary to meet project-specific requirements.",[351,508,509],{},"The core principles are:",[511,512,513,517,520,523,526,529],"ul",{},[514,515,516],"li",{},"Use structured logging rather than string interpolation;",[514,518,519],{},"include relevant data - entity identifiers, input values, branching conditions;",[514,521,522],{},"make log messages descriptive and unique;",[514,524,525],{},"use appropriate log levels to manage volume;",[514,527,528],{},"mark significant points in a process including entry, exit, and decision points;",[514,530,531],{},"and do not log sensitive data without clear justification.",[351,533,534],{},"Each rule addresses a real failure mode: unstructured logs that cannot be filtered, duplicate messages that cannot be located, sensitive data appearing where it should not or log volumes that exhaust ingestion limits and leave monitoring environments blind.",[358,536,538],{"id":537},"conclusion","Conclusion",[351,540,541],{},"Good observability requires deliberate decisions about what to log, where to log it and how to structure it - made at the point of writing code, not in the middle of a production incident.",[351,543,544],{},"The investment is modest: an entry log, an exit log, a branching condition captured before the condition is evaluated, an entity ID included consistently throughout a process. Done well, those habits make production systems diagnosable without a debugger and give alerting a foundation worth building on.",[351,546,547],{},[443,548],{"alt":549,"src":550,"title":551},"Blog Process - Ideation, AI draft, human review","\u002Fimg\u002Ftechnical-blog\u002Fai-disclaimer-1-.png","Blog Process ",{"title":322,"searchDepth":323,"depth":323,"links":553},[554,555,556,561,562,563],{"id":360,"depth":323,"text":361},{"id":399,"depth":323,"text":400},{"id":430,"depth":323,"text":431,"children":557},[558,560],{"id":438,"depth":559,"text":439},3,{"id":458,"depth":559,"text":459},{"id":483,"depth":323,"text":484},{"id":502,"depth":323,"text":503},{"id":537,"depth":323,"text":538},"When something goes wrong in production, there are no breakpoints or debuggers to step through - the only evidence available is what the system was deliberately built to record. This piece looks at what makes a log message useful, how to query logs effectively using Azure Application Insights as an example and how alerting builds on a foundation of good logging.","2026-09-08T10:07:16.564Z","\u002Fimg\u002Ftechnical-blog\u002Fobservability-3-.jpg",{},"\u002Ftechnical-blog\u002Fobservability-in-production-writing-effective-logs-and-diagnosing-issues",{"text":570,"minutes":571,"time":572,"words":573},"9 min read",8.99,539400,1798,{"title":575,"description":576,"keywords":577},"Observability in Production: Writing Effective Logs and Diagnosing Issues | Audacia Insights","Audacia discusses how to write application logs that support diagnosis, how to query them effectively using Azure Application Insights and what to leave out of a good logging strategy.","Application logging, observability, structured logging, Azure Application Insights, KQL queries, how to write effective log messages, how to diagnose issues in Azure Application Insights, alerting strategies for software teams","technical-blog\u002Fobservability-in-production-writing-effective-logs-and-diagnosing-issues","uhsJk2R7VNqLLBnYiERA8wj2KwFquuLkSt8VQWJ_Pjk",1789547576266]