zoukankan      html  css  js  c++  java
  • 系统不同文件路径不同-相同路径在win和linux/mac反应不同

    日志配置中,同样是存储在/system_app.log文件中,若路径存在而文件不存在就会新建文件。在win中没有问题,可以正常运行;在mac/linux中就有FileNotFoundException。原因在于两类不同系统的文件系统和权限管理不同。

    在日志配置中用到DailyRollingFileAppender将日志存储为按天分割的文件,使用到了环境变量进行统一配置:

    log4j.xml
    ${logger.path}/app.log
    

    这里有一个问题,环境变量配置我一直没有找到合适的方法让这个配置文件读取环境变量(如果有解决方案欢迎指教)。我的是mac系统,每次启动时都会有错误信息,提示FileNotFound: /app.log (Read-only file system)。虽然项目会正常执行,但日志只能在控制台查看,无法存储成为文件,且idea的控制台有行数限制,老的日志会被刷掉,无法查看。

    下意识问其他小伙伴,他们都表示windows系统中没有问题,都没有设置环境变量,也不太清楚怎么设置。在我迷茫的时候,一个用win的小伙伴说了一句话:“我也没设置环境变量,日志不就在我D盘根目录嘛”。这让我有了大胆的猜想:“莫非是文件系统不同?”

    首先查看错误日志,提到文件路径是/app.log ,错误信息是(Read-only file system)。这很正常:mac属于unix系统,文件系统和权限控制和linux相似:

    • linux系统,普通用户无法访问其他用户目录和根目录(除非使用sudo)

    • mac OS 10.14及之前,目录结构为经典的UNIX目录树结构。

    • 10.15 catalina 将磁盘容器分为了系统盘和数据盘,即使root权限也无法在系统盘创建/修改文件。管理员用户可以直接查看目录树,可以使用sudo在公共数据目录中创建/修改文件;普通用户可以查看目录树,无法使用sudo。无法访问其他用户的私密文件夹。

      10.15在这里有一个让我困惑的操作:普通用户虽然无法查看管理员私密的文件夹(如Desktop, Document等),但可以在管理员用户根目录下创建的文件中进行 新建/修改/删除 操作。

    这样一说,在mac/linux系统中,是由于权限不足导致了/app.log无法访问。


    后续

    直接修改目录到自己想要的目录下,问题就解决了。但是win中,我们都知道有C盘D盘E盘F盘,切换的时候我们都要输入 D:才能切换盘符,且目录分隔符为(右斜杠),没有盘符的左斜杠为什么会不报错?

    这就和power shell 有一定关系了,linux/unix的命令基本相同,使用命令行十分方便。但是如果使用win,在命令行中需要使用完全不同的命令系统,十分不方便。power shell是一种命令行外壳程序,之前网上说其支持linux命令也是将linux命令转换成了win命令提示符中的命令。在win中,每个磁盘都单独作为一个目录树。

    简单的说,在文件系统中,linux是一棵树,windows就是一个树林(有几个盘就几棵树)。

    加上有power shell 转换/,若目录设置为/app.log,在运行时就会在搭载此项目的tomcat容器所在磁盘的根目录下新建/app.log并生成相应的日志。

    欢迎联系我一起学习讨论~
    mail: wgh0807@qq.com
    微信: hello-wgh0807
    qq: 490536401

  • 相关阅读:
    浏览器内置对象及其方法
    Leetcode | Path Sum I && II
    Leetcode | 3Sum
    算法分析之渐近符号
    Leetcode | Two Sum
    Leetcode | Wildcard Matching
    LeetCode | Regular Expression Matching
    Leetcode | Subsets I & II
    Leetcode | Populating Next Right Pointers in Each Node I & II
    爱是恒久忍耐,又有恩慈
  • 原文地址:https://www.cnblogs.com/wgh0807/p/11855153.html
Copyright © 2011-2022 走看看