请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

IDEA?更改了我的Catalina.base的值

老师好,关于${catalina.base}中的catalina.base 我有两个疑惑点?!
首先,我的工作环境是windows10、 idea2020–、tomcat9.0.12
其次,工程的目录结构和logback.xml和您的一致。

问题一:我指定的系统变量catalina.base和idea中启动项目所显示信息中的caselina.base出现不一致的情况,如图:

图片描述
图片描述
======我百度搜索并未解决,尝试解决未果一如下:
在idea菜单项 run->edit configuration下指定VM 的键值对 -Dcatalina.base=“E:\Tomcat\tomcat-9.0.12\apache-tomcat-9.0.12”

======尝试接受…该种结果,
通过软链接,将idea指定的目录链接到我的其他盘。即将当前用户AppData\Local下JetBrains转移到目标磁盘目录下,cmd进入当前用户AppData\Local下,执行命令该命令(百度的,只是为了不占C盘空间…):

mklink /J "JetBrains" "D:\DevIde\IntelliJIDEA\JetBrains"

======最后
我希望按我配置的catalina.base的路径来指定工作区间,。还是我理解错了?它本来就是如此~~别扭?

问题二:当我继续学习后续课程后,在test/java/com/imooc/o2o下测试AreaDaoTest.java 时,出现了将相关sql操作的debug信息打印在我的工程根目录下的自动生成的catalina.base_IS_UNDEFINED目录里面,如图:

图片描述
其中只记录了test JUNIT单元测试的sql操作的debug信息。而从浏览器中通过url产生的日志信息并未保存在此,而是j继续保存在idea替换的catalina.base 的路径下,如问题一所示。
迷惑-------
迷惑-----
迷惑—
logback.xml中 的name属性不是表示该logger监听当前工程com.immoc.o2o下产生的日志信息吗?并且为何日志的输出位置是项目的根目录下。

======最后
我不清楚为何会出现这种情况,并且我担心这些日志会因为项目的重复部署而消失,我希望它们和我在logback.xml下配置的路径一致从而得以保存起来,虽然它们的价值并不高。

非常感谢老师百忙抽空相助于我,额,希望我表述清楚了…

慕课的编辑器好难啊…

logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan="true" scanPeriod="60 seconds" : 表示定期扫描日志主机的配置信息是否有变化,并且加载进来 -->
<!-- debug=false : 表示告诉logback不要去输出logback组件的相关信息-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 定义参数常量 -->
    <!-- TRACE<DEBUG<INFO<WARN<ERROR -->
    <!-- logger.trace("msg") logger.debug... -->
    <property name="log.level" value="debug" />
    <property name="log.maxHistory" value="30" />
    <!-- ${catalina.base}:catalina.base是tomcat的环境变量,即工作目录,指向每个Tomcat目录私有信息的位置,
        就是conf、logs、temp、webapps和work的父目录。 -->
    <property name="log.filePath" value="${catalina.base}/logs/webapps" />
    <property name="log.pattern"
              value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" />
    <!-- 控制台设置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>
    <!-- DEBUG -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/debug.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <!-- 将日志信息转化为字符串,并且以${log.pattern}定义好的格式,输出到我们指定的日志文件 -->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 用来过滤非level指定的级别的信息。即该appender指定的日志输出文件,记录的是level指定的级别的日志信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- ERROR -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 文件路径 -->
        <file>${log.filePath}/erorr.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 文件名称 -->
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
            </fileNamePattern>
            <!-- 文件最大保存历史数量 -->
            <maxHistory>${log.maxHistory}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 创建一个日志记录器对象,并将上面定义的三个日志输出对象appender与其进行绑定 -->
    <!-- name : 表示该logger监听当前工程com.imooc.o2o下产生的日志信息 -->
    <!-- additivity:当设置为true时,会继承<root>下绑定的日志输出对象,如这里的控制台日志输出对象,并且输出级别是按当期的logger的level来(覆盖了root的) -->
    <logger name="com.imooc.o2o" level="${log.level}" additivity="true">
        <appender-ref ref="debugAppender"/>
        <appender-ref ref="infoAppender"/>
        <appender-ref ref="errorAppender"/>
    </logger>
    <!-- <root> : 特殊的logger,根logger。当子logger没有指定level时,子logger使用root的level指定的级别及更高级别的日志-->
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>
</configuration>

正在回答

1回答

同学好,第一个问题,可以尝试设置一下系统的环境变量 https://www.cnblogs.com/weixinyu98/p/9822048.html,如果不行,再设置一下你指定的内置tomcat目录的Server.xml里面的catalina.base

第二个问题,

得看logback.xml里面配置的路径,咱们这里是

		<file>${log.filePath}/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- 文件名称 -->
			<fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
			</fileNamePattern>
			<!-- 文件最大保存历史数量 -->
			<maxHistory>${log.maxHistory}</maxHistory>
		</rollingPolicy

同学可以用绝对路径来替代,

其实我觉得担心是没必要的,在项目后续实际部署的时候,日志会打到工程下面的。至于同学说日志出现的地方不一致的问题,我觉得还是配置,看看不同的日志级别输出的根目录是否一致

0 回复 有任何疑惑可以回复我~
  • 提问者 苦渡符 #1
    问题一中,尝试老师您的方法,未能解决。最后是在idea的run/debug configurations-->tomcat-->startup/connection中设置了环境变量:CATALINA_BASE="【我tomcat配置catalina_base的值】" ,才得以解决。
    问题二:也许是我表述不清楚,问题二是 单元测试的日志文件保存的位置在o2o工程根目录下,而不是像问题一那样保存在catalina_base的路径下,但是二者的日志目录结构和日志文件名都是按我的lockback.xml中的配置来的,就是说他们被分开保存了。
    现在我解决了问题一,没有解决问题二。
    logger 的 name属性为<logger name="com.imooc.o2o" level="${log.level}" additivity="true">是会同时监听这里的两个目录吗?,如下:
    o2o\src\main\java\com\imooc\o2o 
    o2o\src\test\java\com\imooc\o2o
    如果这两个目录都监听的到,那么是不是因为我们只定义了main下的日志保存规则,而未定义test下的日志保存规则,所以程序(我不知道是谁)帮我在工程的根目录下创建了这个目录来保存生成的日志文件。如果不是,没思路了,望老师指导下。
    回复 有任何疑惑可以回复我~ 2020-11-30 21:02:18
  • 翔仔 回复 提问者 苦渡符 #2
    同学好,这里主要是因为你执行代码的时候,实际执行的文件对应的路径对应的相对路径不一致造成的,也就是你测试的时候,实际是在test目录下,而执行的时候,是在tomcat的目录下。当前目录不一致所以不一致
    回复 有任何疑惑可以回复我~ 2020-12-01 00:48:47
  • 提问者 苦渡符 回复 翔仔 #3
    不太明白,我应该如何配置才能使得测试的日志也和其他日志保存在一起
    回复 有任何疑惑可以回复我~ 2020-12-01 15:34:20
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信