You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将tinylog滚动日志文件写入user.home目录?

如何将tinylog滚动日志写入user.home目录?

我需要实现将tinylog的滚动日志文件写入user.home目录,尝试了两种方法都遇到问题:

尝试方法1:系统属性+配置文件

先通过代码设置系统属性:

System.setProperty("tinylog.directory", PathHelper.getLoggingDir());

再在tinylog.properties中配置路径:

writerRollingFile.file     = ${tinylog.directory}/demo/logs/{date:yyyy-MM-dd}-log.{count}.txt
writerRollingFile.latest   = ${tinylog.directory}/demo/logs/latest.txt

问题:配置文件无法识别${tinylog.directory}变量。

尝试方法2:代码直接配置tinylog

改用代码直接配置日志路径:

Configuration.set("writerRollingFile.file", String.format("%1$s%2$s%3$s", PathHelper.getLoggingDir(), File.separator,  "{date:yyyy-MM-dd}-log.{count}.txt"));
Configuration.set("writerRollingFile.latest", String.valueOf(Paths.get(PathHelper.getLoggingDir() ,  "latest.txt")));

问题:writerRollingFile.file配置失效,生成的滚动日志路径中多了一个分号,例如C:\Users\MyUserName\demo\logs;2022-10-17-log.0.txt,但latest.txt能正常生成在正确目录。

我的PathHelper.getLoggingDir()核心代码如下:

Path pathToFile = Paths.get(sUserHomeDir, sAppName, sLoggingDir);

解决方法

感谢Martin的提示,将配置文件中的变量前缀${...}替换为#{...}后问题解决。

正确的tinylog.properties配置

# rolling file
writerRollingFile          = rolling file
writerRollingFile.level    = warn
writerRollingFile.format   = {date: dd.mm.yyyy HH:mm:ss.SSS} {level}: {class}.{method}()\t{message}
writerRollingFile.file     = #{tinylog.directory}/{date:yyyy-MM-dd}-log.{count}.txt
writerRollingFile.latest   = #{tinylog.directory}/latest.txt
writerRollingFile.charset  = UTF-8
writerRollingFile.buffered = true
writerRollingFile.policies = startup, daily: 00:00, size: 1mb
writerRollingFile.backups  = 100
writerRollingFile.convert  = gzip 

启动时设置系统属性

System.setProperty("tinylog.directory", PathHelper.getLoggingDir());

完整的PathHelper.getLoggingDir()实现

private static final String sUserHomeDir = System.getProperty("user.home");
private static final String sAppName =  "Demo";
private static final String sLoggingDir =  "Logs";

public static String getLoggingDir() throws IOException {
    // 自动适配不同系统的路径分隔符
    Path pathToFile = Paths.get(sUserHomeDir, sAppName, sLoggingDir);
    // 自动创建目录(含父目录),目录已存在时不会抛出异常
    Files.createDirectories(pathToFile);
    return pathToFile.toString();
}

内容的提问来源于stack exchange,提问作者Dirk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:25:20