如何向用户写入滚动文件。主目录。
到目前为止,我尝试设置一个环境变量来访问tinylog属性文件中的路径:
System.setProperty("tinylog.directory", PathHelper.getLoggingDir());
结果:“tinylog”。tinylog.properties在环境变量中找不到目录“”
下面是我在tinylog.properties中的写法:
writerRollingFile.file = ${tinylog.directory}/demo/logs/{date:yyyy-MM-dd}-log.{count}.txt
writerRollingFile.latest = ${tinylog.directory}/demo/logs/latest.txt
另一种方法是通过代码设置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。文件无法工作,因为tinylog无法在路径和文件之间写入滚动文件->C: \Users\MyUserName\demo\logs;2022-10-17-log.0.txt
另一个文件“latest.txt”是在正确的目录下创建的,没有问题。
下面是我如何使用PathHelper.getLoggingDir()方法解析路径:
Path pathToFile = Paths.get(sUserHomeDir, sAppName, sLoggingDir);
有可能让它与用户一起工作吗。主目录?
感谢马丁,用#{...}
替换前缀有帮助:${...}
我的小宝贝。属性文件:
# 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());
以上
并获取或制作目录:
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 {
// inserts correct file path separator on *nix and Windows
Path pathToFile = Paths.get(sUserHomeDir, sAppName, sLoggingDir);
// The Files.createDirectories creates a new directory;
// if the parent directories do not exist, they are created as well.
// The method does not thrown an exception if the directory already exist.
Files.createDirectories(pathToFile);
return pathToFile.toString();
}
2条答案
按热度按时间hiz5n14c1#
第一种方法是推荐的方法。您只需将
${...}
替换为#{...}
。$
前缀用于环境变量,#
后缀用于系统属性(请参阅文档)。此外,如果在发出任何日志条目之前执行
System.setProperty("tinylog.directory", PathHelper.getLoggingDir())
,则必须进行检查。yqhsw0fo2#
.................................................