首先,我尝试了所有存在的解决方案,但没有任何效果,所以我不想让任何人说这个问题是重复的。
我无法使用 logback 登录到文件,但我可以毫无问题地登录到控制台。
我的
logback.xml
文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
<!--for further documentation-->
<append>true</append>
<File>/root/connector/logs/connector.log</File>
<encoder>
<!-- was: %d{yyyy-MM-dd HH:mm:ss}%5p [%t] (%F:%L) - %msg%n -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] \(%class{25}:%line\) - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- By setting the name to .gz here, we get free compression. -->
<fileNamePattern>/root/connector/logs/connector.log.%d{yyyy-MM-dd}.gz</fileNamePattern>
</rollingPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
我什至试图给所有用户在文件夹中写入的权限,但这不起作用
drwxrwxrwx。 2 没有人没有人 4096 4 月 29 日 08:24 日志
我再说一遍,我尝试了所有存在的解决方案,但没有任何效果。
也许以下链接会对您有所帮助。
https://dzone.com/articles/do-not-use-relative-path
编辑:此链接表示“不要将相对路径用于 logback”。但是我找到了一个机会来测试它。我发现了一些奇怪的输出。
我的测试平台是一个 web 应用程序,这个应用程序在 Windows 上的 Apache Tomcat 下运行。 配置和输出:
<file>/logs/output.log</file>
--------------> 在 C:\logs 文件夹中创建日志文件
<file>C:/logs/output.log</file>
------------> 在 C:\logs 文件夹中创建日志文件
<file>../logs/output.log</file>
------------> 在 tomcat 日志文件夹中创建日志文件
<file>logs/output.log</file>
--------------> 在 tomcat bin\logs 文件夹中创建日志文件
有时日志文件没有创建,我认为,主要原因是用户/应用程序缺少创建文件权限。
添加这部分
<logger name="com.my.package" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</logger>
<!-- By default, the level of the root level is set to DEBUG -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
代替
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
写你的项目包名而不是
com.my.package
希望它能解决您的问题。
发送日志到文件
所有日志记录将被重定向到一个文件
c:/logs/debug.log
。此外,此日志文件将每天存档或文件大小大于 10MB。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="DEV_HOME" value="c:/logs" />
<appender name="FILE-AUDIT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${DEV_HOME}/debug.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} - %msg%n
</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${DEV_HOME}/archived/debug.%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.mkyong.web" level="debug"
additivity="false">
<appender-ref ref="FILE-AUDIT" />
</logger>
<root level="error">
<appender-ref ref="FILE-AUDIT" />
</root>
</configuration>
我也遇到了同样的问题。就我而言,我将 eclipse 与 tomcat 一起使用。
If(绝对路径) 那么就没有问题了,日志文件会在指定的路径中创建。
else if(相对路径&&在eclipse中工作) 那么你的日志文件是在相对于 eclipse 安装目录的路径中创建的。
else if(相对路径&&部署在tomcat中) 然后在相对于 tomcat
bin 文件夹的路径中创建日志文件当我遇到这个问题时,我不得不将logback.log文件所在的文件夹添加为源文件夹。 在 Eclipse 中,只需右键单击文件夹 -> 构建路径 -> 用作源文件夹。
创建一个存储库并将其作为源文件夹包含在内,并将 logback.xml 文件放入其中。 要将存储库包含到源文件夹中,请单击存储库->构建路径->用作源文件夹
就我而言,实际上是我在忽略 xml 属性文件的 pom.xml 中添加了一些内容。添加后
<include>**/*.xml</include>
在那里,它起作用了
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.json</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
我缺少依赖项 ch.qos.logback logback-classic
在我的例子中,文件不是为新的附加程序创建的,因为 under 标签的值/模式不是唯一的。然后没有创建新附加程序的日志文件。