尝试 LogRotateWin

尝试 LogRotateWin

我们有一个巨大的日志文件,由供应商的应用程序写入。假设供应商不会做我们要求的任何事情。有没有什么方法可以轮换该日志文件?我们每小时大约有 300 MB 的数据被写入 - 我宁愿将其分成 10 MB 的块,让任何超过一天或超过 1000 个文件的数据都掉下来。

(我知道我知道,可能重复如何在不中断服务的情况下在 Windows 上轮换 Apache 日志?

啊哈 - Chomp log 已经死了,但搜索“chomp logrotate”让我找到了它的新网站。我明天会尝试一下,如果喜欢的话会回复。我仍然想听听其他人正在使用的适用于此的软件。

答案1

尽管我对这个建议感到很不满,但安装 Cygwin 是你为数不多的可用选项之一。从那里,你可以使用logrotate

答案2

我还没用过,但是日志旋转赢是 Windows 上 logrotate 的原生实现,看起来很有前途。至少它不需要 Cygwin。

答案3

看一下logwot8,它是 logrotate 的封装,包含一个有限的 shell 环境和所需的 cygwin 层组件,可立即使用(安装程序大小为 4 MB)。您需要根据自己的需求自定义配置文件。它可在 2 句 BSD 许可下免费使用和分发。

免责声明:我是开发者:-)

答案4

尝试 LogRotateWin

我试过了日志旋转赢在过去的几天里。

该项目似乎有些被遗弃,而且我在所做的少量测试中发现了一些错误。(例如,“--help”显示的一些命令行参数实际上并未实现。例如,通过 logrotate.status statefile 进行的状态跟踪不适用于 logrotate.conf 中的相对路径。相反,它们总是会轮换。而不仅仅是在它们的时间到了时。因此您只能使用绝对路径。)

但该 exe 只有 40KB,而且确实有一些不错的功能。我喜欢他们的使命宣言:“目标是使用与 Linux 版本相同的命令行参数和文件。”我喜欢它。

下面是可用的示例 starter-batch 和示例 conf 文件。

记录 logrotate 的输出

一个元问题:如何记录 logrotate 本身的活动?我将对 logrotate.exe 的调用包装在一个批处理文件中。它将所有内容记录到临时文件中,然后调用 logrotate,然后将临时文件中的所有内容附加到最终日志文件,然后删除该临时文件。然后,logrotate.exe 本身将在下一次运行中处理该最终日志文件。然后,我通过 Windows 任务计划程序运行该启动批处理文件。

非常不可靠,但能完成工作。

Do-LogRotate.bat

setlocal

REM Quick and dirty. Wild mixture of Batch and PowerShell. No error checking.

REM Change current directory to where our script is.
cd /D "%~dp0"

set "TEMPOUTPUTFILE=logrotate.temp-log"
set "FINALOUTPUTFILE=logrotate.log"

echo. 1>> %TEMPOUTPUTFILE% 2>&1
powershell -command "& {Write-Output((get-date -format o) + ' Logrotate script START.')}" 1>> %TEMPOUTPUTFILE% 2>&1
logrotate.exe -s logrotate.status logrotate.conf --verbose 1>> %TEMPOUTPUTFILE% 2>&1
powershell -command "& {Write-Output((get-date -format o) + ' Logrotate script END.')}" 1>> %TEMPOUTPUTFILE% 2>&1

REM Somewhat of a hack. I can't have logrotate handle its own logs on
REM Windows it seems.
REM -- I guess file options for shared access are not set in the right way when 
REM you use the ">>" redirect operator. Neither "move", nor "copytruncate" 
REM logrotate directives work.
REM So instead append the contents to the other outputfile. -- Not sure this 
REM this really works. But oh, well. The logrotate logs themselves are not 
REM really that important. So it's not too terrible if we lose a few of them.
TYPE %TEMPOUTPUTFILE% >> %FINALOUTPUTFILE%
DEL %TEMPOUTPUTFILE%

logrotate.conf

C:\winscp\WinSCP.log {
    daily
    minsize 1M
    rotate 10
}

# Unfortunately relative paths don't work.
C:\dev\logrotatetests\logrotate.log {
    monthly
    rotate 5
}

相关阅读:我一直在为 Windows 上的 Apache Tomcat 日志而苦恼。这就是我研究 logrotatewin 的原因。https://stackoverflow.com/questions/19787279/where-to-configure-internal-tomcat7-stdout-stderr-log-files/54423803#54423803

相关内容