Как мы все знаем, в файле "unix" может быть что угодно, кроме '/' и '\ 0', однако системные администраторы, как правило, имеют гораздо меньшие предпочтения, в основном из-за того, что им не нравятся пробелы в качестве входных данных ... и куча вещей, имеющих особое значение для ":" и "@" среди других.
Недавно я видел еще один случай, когда в имени файла использовалась временная метка, и, немного поиграв с разными форматами, чтобы сделать его «лучше», я решил, что попытаюсь найти «лучший метод», не увидев того, который я решил Я просто спрошу здесь и посмотрю, что думают люди.
Возможные «общие» решения (p = префикс и s = суффикс):
syslog / logrotate / DNS как формат:
p-%Y%m%d-suffix = prefix-20110719-s
p-%Y%m%d%H%M-suffix = prefix-201107191732-s
p-%Y%m%d%H%M%S-suffix = prefix-20110719173216-s
плюсы:
минусы:
ISO-8601- формат
p-%Y-%m-%d-s = p-2011-07-19-s
p-%Y-%m-%dT%H:%M%z-s = p-2011-07-19T17:32-0400-s
p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T17:32:16-0400-s
p-%Y-%m-%dT%H:%M:%S%z-s = p-2011-07-19T23:32:16+0200-s
плюсы:
минусы:
формат rfc-3339
p-%Y-%m-%d-s = p-2011-07-19-s
p-%Y-%m-%d %H:%M%:z-s = p-2011-07-19 17:32-04:00-s
p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 17:32:16-04:00-s
p-%Y-%m-%d %H:%M:%S%:z-s = p-2011-07-19 23:32:16+02:00-s
плюсы:
минусы:
Люблю дефисы:
p-%Y-%m-%d-s = p-2011-07-19-s
p-%Y-%m-%d-%H-%M-s = p-2011-07-19-17-32-s
p-%Y-%m-%d-%H-%M-%S-s = p-2011-07-19-23-32-16-s
плюсы:
минусы:
Я люблю дефисы с расширениями:
p.%Y-%m-%d.s = p.2011-07-19.s
p.%Y-%m-%d.%H-%M.s = p.2011-07-19.17-32.s
p.%Y-%m-%d.%H-%M-%S.s = p.2011-07-19.23-32-16.s
плюсы:
минусы:
... так что любой хочет указать предпочтение и причину, или более одной (например, не заботьтесь о TZ, если 95 +%, чтобы оставаться локальной машиной, но очень заботитесь, если это не так).
Или, очевидно, что-то не в приведенном выше списке.
Итак ... примеры "лучших" форматов даты и времени:
20120317T1748Z
2012-03-17T1748Z
2012-03-17--1748Z
Я неравнодушен к 1. поскольку это полностью IAW стандарт, но другие близки.
Примечание: конечно, добавляйте секунды по мере необходимости. ... и да, с секундами (или даже минутами) или без них - это все IAW ISO 8601. :)
Я бы не стал включать часовой пояс, использовал только всемирное время. Если может возникнуть путаница, вы можете добавить суффикс -UTC. Если вы укажете часовой пояс, кто-то может от него зависеть. И были бы странные крайние случаи, когда изменения DST или сдвиги DST наносят ущерб некоторой обработке, или обработка отличается в некоторых системах, потому что их конфигурация DST не обновлена. UTC всегда везде одинаково.
Я действительно думаю, что дефисы делают имя файла более читаемым, в том смысле, что это облегчает определение даты и времени данных файла. Если вы хотите указать точность до субсекунды, обычно это .nnnnn.
Мне лично не нравится T. Использование двоеточия в имени файла может повлиять на совместимость с другими файловыми системами.
Как бы то ни было, это формат, который утилита скриншотов scrot
по умолчанию используется для имени файла (т. е .: если имя файла не указано):
%Y-%m-%d-%H%M%S_$wx$h_scrot.png
Детали, использующие %
являются стандартными strftime(3)
спецификаторы формата, $w
ширина изображения и $h
высота изображения.
Пример:
$ scrot
$ find *.png
2020-03-07-152236_1920x1080_scrot.png
Для меток времени UTC:
$ TZ=UTC scrot
$ find *.png
2020-03-07-152236_1920x1080_scrot.png
2020-03-07-183257_1920x1080_scrot.png
Заметка: Часовой пояс не указан в имени файла. Учитывая предназначение инструмента (например, скриншоты), я не думаю, что это принесет пользу. Кроме того, я считаю, что приведенный выше формат достаточно прост как для чтения, так и для анализа.
if (!opt.output_file) {
opt.output_file = gib_estrdup("%Y-%m-%d-%H%M%S_$wx$h_scrot.png");
opt.thumb_file = gib_estrdup("%Y-%m-%d-%H%M%S_$wx$h_scrot-thumb.png");
} else {
have_extension = scrot_have_file_extension(opt.output_file);
}
Я бы тоже не стал включать часовые пояса. Ваши скрипты / инструменты, которые обрабатывают журналы, должны знать об этом. Также в отношении изменения летнего / зимнего времени - я бы рекомендовал, чтобы ваш сервер всегда был привязан к UTC. Внезапная разница между часовым поясом базового сервера и (неизменным) часовым поясом базы данных, работающей на нем, может привести к головной боли ;-).
Что касается именования файлов журнала - я знаю, многим это не нравится, но я предпочитаю, чтобы это было проще:
p-%s-type.log = p-1311116459-type.log
плюсы:
минусы:
На машинах, где коллегам (по какой-либо причине) нужно проверять журналы вручную, я выбрал этот вариант, меняя его ежедневно:
p-%Y-%m-%d-type.log = p-2011-07-20-type.log
С уважением