Есть несколько файлов журналов, которые меня по-настоящему впечатлили - на самом деле, я изо всех сил пытаюсь придумать что-нибудь (и не могу найти ни одного). По моему опыту, возникающие проблемы частично возникают из-за того, что журналы отформатированы для понимания внутренним (программистом), а не для понимания другой программой или сторонним (не программистским).
Важная информация часто опускается; иногда даже информация о дате и времени. Я бы порекомендовал сделать их легко разбираемыми; Я бы использовал обозначение ISO 8601, например, «2010-01-22T10: 23: 21-08: 00» (включая часовой пояс, примечание). Я бы включил идентификатор процесса (и потока); Я хотел бы рассмотреть в том числе имя программы, аргументы (например, имя файла); Я бы включил идентификатор пользователя в какой-то форме. Часть этого может потребоваться только один раз за цикл, но для каждого сообщения могут потребоваться другие биты. Частично это зависит от того, является ли файл журнала уникальным для каждого прогона или общим для прогонов, и может ли один файл использоваться более чем одним пользователем / процессом.
Затем вам нужно решить, как вы собираетесь идентифицировать содержание сообщения - и конец содержимого сообщения. Особенно для машинного анализа (но также и для человеческого анализа) полезно, если содержимое однозначно отформатировано и конец может быть обнаружен. Вам может потребоваться экранировать содержимое (этот шаг чаще всего отменяется, поэтому, если сообщение об ошибке связано с ошибочно сформированным сообщением об ошибке, очень сложно определить, какие данные содержатся в файле, а что новое сообщение об ошибке о данных в файле). В многопоточной программе - или там, где файл журнала может быть разделен между процессами - вы должны учитывать, как записи будут также буферизироваться, особенно если вам приходится иметь дело с длинными строками. Вы хотите, чтобы каждое сообщение было отдельно в журнале. Это не обязательно тривиально - вам может даже понадобиться иметь дело с протоколом блокировки, чтобы обеспечить контролируемый доступ.
Подумайте, нужно ли вам предоставить симпатичный принтер для журнала.
Подумайте, поможет ли формат на основе XML (с тегами начала и конца). Я не большой поклонник XML, но у него есть некоторые преимущества для машинной обработки.