Welcome back to the dramatic conclusion of our discussion on the 12 factor app. This time we’re talking dev/prod parity, logs, and admin processes. Oh, and Call of Duty!
- Thanks for the reviews! arathustra, lu S, Seb (from London), S Willowood, TheDarkKnight15, FreeAppsHunter
- Where do transforms go? UI or Middleware?
- Joe had surgery!
- Oopsy correction: Macbooks use a variant of Mini PCI Express & mSATA:
- Keep development, staging, and production as similar as possible
- 3 kinds of gaps:
- Tools: Sometimes prod uses different
- Time: Sometimes there can be long gaps between deployments
- Personnel: The programmers may not be the people deploying/testing
Importance Rating: Medium
- Treat logs as event streams
- Nice definition of logging: Logs are the stream of aggregated, time-ordered events collected from the output streams of all running processes and backing services.
- Your app shouldn’t concern itself with routing or storage of its output stream
- Only write to stdout and stderr, let another tool route the logging to where it needs to go, file management doesn’t need to clutter up your app
- Files are inconvenient once you have multiple stateless servers, you’re really going to want something like Splunk or Logstash
- In addition to aggregating your logs, they also have nice alerting, graphing and search capabilities
- How much logging is too much logging?
Importance Rating: Low
- Run admin/management tasks as one-off processes
- Examples: db tasks, arbitrary code,scripts
- Keep tasks with code, don’t let it diverge!
- Interesting: Twelve-factor strongly favors languages which provide a REPL shell out of the box
Importance Rating: High
Resources we like
Tips & Tricks
- Git checkout specific branch: git clone [clone-url] –branch [branch-name] –single-branch
- Use npm to setup your packages for other devs: npm install –save or npm install –save-dev
- SQL Sentry Plan Explorer – thanks Jeff Belina!
- Finding/Replacing text in WebStorm
- Having problems with similar routes in multiple controllers in WebAPI?
Attribute routing to the rescue!
[Route(“api/customers/getName”)] in CustomerController.cs and [Route(“api/employees/getName”)] in EmployeeController.cs
- Don’t forget to add swagger to your WebAPI projects with Swashbuckle!