История изменений
Исправление liksys, (текущая версия) :
Ну этого как раз и надо добиться.
Зачем?
Да, но зачем было пихать это на rw-десктоп?
Затем, что это единая кодовая база и хранилища управляются единообразно и стандартно, независимо от инсталляции и дистрибутива. Например, я могу указать, что хочу, чтобы всё лежало в памяти и занимало не больше 64 мегабайт - и журнал будет подчищать старые записи. Причем не костылями а-ля logrotate, а по-нормальному. Или сделать то же самое, но для дискового хранилища. И всё, что мне требуется - заменить одну строчку в конфиге.
А еще я на некоторых ноутбуках делаю логгирование в память, чтобы не насиловать nvme лишними записями. Тоже очень удобно.
open-wrt
У них свой собственный мир и своя сложившаяся экосистема, с которой они живут уже очень давно. Это вообще не показатель. Они может быть и перешли бы, но для этого им придется разломать всю ось и поиметь огромный геморрой с совместимостью. Проще продолжать делать, как делали.
Может пропустить вредную промежуточную стадию сразу приступить к чтению лога демона?
Читай логи напрямую с диска глазами, пропусти вредную промежуточную стадию less.
И что странно, это тоже делается без журналда проще, чем с журналдом.
Точно? Точно-точно? А если я код принесу?
class LogReader:
async def poll_log(self, seek: int, follow: bool) -> AsyncGenerator[dict, None]:
reader = systemd.journal.Reader()
reader.this_boot()
reader.log_level(systemd.journal.LOG_DEBUG)
services = set(
service
for service in systemd.journal.Reader().query_unique("_SYSTEMD_UNIT")
if re.match(r"myservice(-\w+)*\.service", service)
)
for service in services:
reader.add_match(_SYSTEMD_UNIT=service)
if seek > 0:
reader.seek_realtime(float(time.time() - seek))
for entry in reader:
yield self.__entry_to_record(entry)
while follow:
entry = reader.get_next()
if entry:
yield self.__entry_to_record(entry)
else:
await asyncio.sleep(1)
def __entry_to_record(self, entry: dict) -> dict[str, dict]:
return {
"dt": entry["__REALTIME_TIMESTAMP"],
"service": entry["_SYSTEMD_UNIT"],
"msg": entry["MESSAGE"].rstrip(),
}
Куда уж проще.
Исправление liksys, :
Ну этого как раз и надо добиться.
Зачем?
Да, но зачем было пихать это на rw-десктоп?
Затем, что это единая кодовая база и хранилища управляются единообразно и стандартно, независимо от инсталляции и дистрибутива. Например, я могу указать, что хочу, чтобы всё лежало в памяти и занимало не больше 64 мегабайт - и журнал будет подчищать старые записи. Причем не костылями а-ля logrotate, а по-нормальному. Или сделать то же самое, но для дискового хранилища. И всё, что мне требуется - заменить одну строчку в конфиге.
А еще я на некоторых ноутбуках делаю логгирование в память, чтобы не насиловать nvme лишними записями. Тоже очень удобно.
open-wrt
У них свой собственный мир и своя сложившаяся экосистема, с которой они живут уже очень давно. Это вообще не показатель. Они может быть и перешли бы, но для этого им придется разломать всю ось и поиметь огромный геморрой с совместимостью. Проще продолжать делать, как делали.
Может пропустить вредную промежуточную стадию сразу приступить к чтению лога демона?
Читай логи напрямую с диска глазами, пропусти вредную промежуточную стадию less.
И что странно, это тоже делается без журналда проще, чем с журналдом.
Точно? Точно-точно? А если я код принесу?
class LogReader:
async def poll_log(self, seek: int, follow: bool) -> AsyncGenerator[dict, None]:
reader = systemd.journal.Reader()
reader.this_boot()
reader.log_level(systemd.journal.LOG_DEBUG)
services = set(
service
for service in systemd.journal.Reader().query_unique("_SYSTEMD_UNIT")
if re.match(r"myservice(-\w+)*\.service", service)
).union(["kvmd.service"])
for service in services:
reader.add_match(_SYSTEMD_UNIT=service)
if seek > 0:
reader.seek_realtime(float(time.time() - seek))
for entry in reader:
yield self.__entry_to_record(entry)
while follow:
entry = reader.get_next()
if entry:
yield self.__entry_to_record(entry)
else:
await asyncio.sleep(1)
def __entry_to_record(self, entry: dict) -> dict[str, dict]:
return {
"dt": entry["__REALTIME_TIMESTAMP"],
"service": entry["_SYSTEMD_UNIT"],
"msg": entry["MESSAGE"].rstrip(),
}
Куда уж проще.
Исправление liksys, :
Ну этого как раз и надо добиться.
Зачем?
Да, но зачем было пихать это на rw-десктоп?
Затем, что это единая кодовая база и хранилища управляются единообразно и стандартно, независимо от инсталляции и дистрибутива. Например, я могу указать, что хочу, чтобы всё лежало в памяти и занимало не больше 64 мегабайт - и журнал будет подчищать старые записи. Причем не костылями а-ля logrotate, а по-нормальному. Или сделать то же самое, но для дискового хранилища. И всё, что мне требуется - заменить одну строчку в конфиге.
А еще я на некоторых ноутбуках делаю логгирование в память, чтобы не насиловать nvme лишними записями. Тоже очень удобно.
open-wrt
У них свой собственный мир и своя сложившаяся экосистема, с которой они живут уже очень давно. Это вообще не показатель. Они может быть и перешли бы, но для этого им придется разломать всю ось и поиметь огромный геморрой с совместимостью. Проще продолжать делать, как делали.
Может пропустить вредную промежуточную стадию сразу приступить к чтению лога демона?
Читай логи напрямую с диска глазами, пропусти вредную промежуточную стадию less.
И что странно, это тоже делается без журналда проще, чем с журналдом.
Точно? Точно-точно? А если я код принесу?
async def poll_log(self, seek: int, follow: bool) -> AsyncGenerator[dict, None]:
reader = systemd.journal.Reader()
reader.this_boot()
reader.log_level(systemd.journal.LOG_DEBUG)
services = set(
service
for service in systemd.journal.Reader().query_unique("_SYSTEMD_UNIT")
if re.match(r"myservice(-\w+)*\.service", service)
).union(["kvmd.service"])
for service in services:
reader.add_match(_SYSTEMD_UNIT=service)
if seek > 0:
reader.seek_realtime(float(time.time() - seek))
for entry in reader:
yield self.__entry_to_record(entry)
while follow:
entry = reader.get_next()
if entry:
yield self.__entry_to_record(entry)
else:
await asyncio.sleep(1)
Куда уж проще.
Исправление liksys, :
Ну этого как раз и надо добиться.
Зачем?
Да, но зачем было пихать это на rw-десктоп?
Затем, что это единая кодовая база и хранилища управляются единообразно и стандартно, независимо от инсталляции и дистрибутива. Например, я могу указать, что хочу, чтобы всё лежало в памяти и занимало не больше 64 мегабайт - и журнал будет подчищать старые записи. Причем не костылями а-ля logrotate, а по-нормальному. Или сделать то же самое, но для дискового хранилища. И всё, что мне требуется - заменить одну строчку в конфиге.
А еще я на некоторых ноутбуках делаю логгирование в память, чтобы не насиловать nvme лишними записями. Тоже очень удобно.
open-wrt
У них свой собственный мир и своя сложившаяся экосистема, с которой они живут уже очень давно. Это вообще не показатель. Они может быть и перешли бы, но для этого им придется разломать всю ось и поиметь огромный геморрой с совместимостью. Проще продолжать делать, как делали.
Может пропустить вредную промежуточную стадию сразу приступить к чтению лога демона?
Читай логи напрямую с диска глазами, пропусти вредную промежуточную стадию less.
Исходная версия liksys, :
Ну этого как раз и надо добиться.
Зачем?
Да, но зачем было пихать это на rw-десктоп?
Затем, что это единая кодовая база и хранилища управляются единообразно и стандартно, независимо от инсталляции и дистрибутива. Например, я могу указать, что хочу, чтобы всё лежало в памяти и занимало не больше 64 мегабайт - и журнал будет подчищать старые записи. Причем не костылями а-ля logrotate, а по-нормальному. Или сделать то же самое, но для дискового хранилища. И всё, что мне требуется - заменить одну строчку в конфиге.
А еще я на некоторых ноутбуках делаю логгирование в память, чтобы не насиловать nvme лишними записями. Тоже очень удобно.
open-wrt
У них свой собственный мир и своя сложившаяся экосистема, с которой они живут уже очень давно. Это вообще не показатель. Они может бы и перешли, но для этого им придется разломать всю ось и поиметь огромный геморрой с совместимостью. Проще продолжать делать, как делали.
Может пропустить вредную промежуточную стадию сразу приступить к чтению лога демона?
Читай логи напрямую с диска глазами, пропусти вредную промежуточную стадию less.