[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-log-writing-standards-en":3,"blog-related-log-writing-standards-en":28,"blog-adjacent-log-writing-standards-en":63},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":27},49,"log-writing-standards","Logging Standards: Still Readable Three Months Later","Logs are written for future colleagues and for yourself at three in the morning. Structure is the baseline.","\u003Cp>The hardest part of debugging is not missing logs but unreadable ones: a single line saying processing failed, no request id, no parameters, no context. That pushed us to write a short standard.\u003C\u002Fp>\n\u003Ch2>Four rules\u003C\u002Fh2>\n\u003Cp>Every line carries time, level, module, request id and key parameters, using consistent field names.\u003C\u002Fp>\n\u003Cp>Error logs include a stack trace and a business identifier such as an order or client number, never an internal auto-increment id.\u003C\u002Fp>\n\u003Cp>Do not log inside loops; aggregate instead, or the disk fills up.\u003C\u002Fp>\n\u003Cp>Mask sensitive data: phone numbers, identity numbers and payment details never appear in plain text.\u003C\u002Fp>\n\u003Ch2>Use levels sparingly\u003C\u002Fh2>\n\u003Cp>INFO marks key business steps, WARN covers recoverable anomalies, ERROR means a human must act.\u003C\u002Fp>\n\u003Cp>If ERROR fires hundreds of times a day, the levels have lost meaning and the team stops noticing.\u003C\u002Fp>\n\u003Cp>Review log output before release so critical paths are covered, instead of adding them after an incident.\u003C\u002Fp>\n\u003Cp>Good logs turn hours of debugging into minutes. They are the cheapest observability investment available.\u003C\u002Fp>","","slate","佳益方圆团队","2026-03-03T12:07:00+08:00",1,false,[16,17,18],"Logging","Standards","Engineering",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},0,"engineering","Hands-on engineering practices in architecture, performance optimization, AI integration and cross-platform delivery from our R and D team.","cpu","blue","article",60,{},[29,40,52],{"id":30,"slug":31,"title":32,"excerpt":33,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":35,"updatedAt":35,"readingMinutes":13,"featured":14,"tags":36,"category":39},30,"integration-api-pitfalls","Five Traps in Enterprise System Integration","However complete the API documentation is, integration usually stalls on field semantics, timeouts and repeated pushes.","cyan","2026-10-17T09:00:00+08:00",[37,38,18],"Integration","APIs",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"id":13,"slug":41,"title":42,"excerpt":43,"content":9,"cover":9,"tone":34,"author":11,"publishedAt":44,"updatedAt":45,"readingMinutes":46,"featured":47,"tags":48,"category":51},"why-enterprise-systems-age","Why Enterprise Systems Start to Age After Three Years","A system can pass acceptance with every feature checked, then feel awkward three years later. The problem is rarely the code — it is the changes that were never considered at delivery.","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[49,50],"System Evolution","Architecture",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"id":53,"slug":54,"title":55,"excerpt":56,"content":9,"cover":9,"tone":24,"author":11,"publishedAt":57,"updatedAt":57,"readingMinutes":13,"featured":14,"tags":58,"category":62},31,"idempotent-design-basics","Idempotency: Duplicate Submissions Are Not Just Double Clicks","Retries, redelivery and impatient users all send the same request more than once. Idempotency belongs in the API design.","2026-10-05T10:13:00+08:00",[59,60,61],"API Design","Idempotency","Reliability",{"id":13,"parentId":20,"slug":21,"name":18,"description":22,"icon":23,"cover":9,"tone":24,"kind":25,"sortOrder":26,"count":20},{"previous":64,"next":82},{"id":65,"slug":66,"title":67,"excerpt":68,"content":9,"cover":9,"tone":69,"author":11,"publishedAt":70,"updatedAt":70,"readingMinutes":13,"featured":14,"tags":71,"category":75},28,"the-quote-line-nobody-reads","The One Line Nobody Reads in a Quote","'Third-party costs excluded' has saved us a surprising number of arguments.","indigo","2026-03-05T11:54:00+08:00",[72,73,74],"Startup","Quotes","Contracts",{"id":76,"parentId":20,"slug":77,"name":78,"description":79,"icon":80,"cover":9,"tone":24,"kind":25,"sortOrder":81,"count":20},6,"founder-notes","Founder Notes","Reflections from the founding team on business, management and product, documenting the growth of a software company.","pen-tool",10,{"id":83,"slug":84,"title":85,"excerpt":86,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":87,"updatedAt":87,"readingMinutes":13,"featured":14,"tags":88,"category":92},69,"search-in-admin","Designing Search in Admin Systems","Anyone can add a search box. The hard part is matching how users actually look for data.","2026-03-01T12:07:00+08:00",[89,90,91],"Search","Admin","Product Design",{"id":46,"parentId":20,"slug":93,"name":94,"description":95,"icon":96,"cover":9,"tone":24,"kind":25,"sortOrder":97,"count":20},"product-thinking","Product Thinking","Requirement analysis, user experience and product design methods, plus the thinking from business problems to product solutions.","lightbulb",50]