标签: rollingfileappender

logback asyncAppender似乎不是线程安全的

我在其中添加了自己的SUMMARY_APPENDER,创建了一个AsyncAppender.

ASYNC Appender如下

 <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
 <discardingThreshold>2</discardingThreshold>
 <appender-ref ref="SUMMARY_APPENDER" />
 <!--   <appender-ref ref="PROCESSING" /> -->
 </appender>
Run Code Online (Sandbox Code Playgroud)

我创建了另一个SUMMARY_APPENDER

<appender name="SUMMARY_APPENDER"
    class="com.my.test.logger.async.MyRollingAppender">
    <file>./logs/summary.log</file>
    <rollingPolicy class="com.my.test.logger.async.MyTimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>./logs/%d{yyyy-MM-dd,aux}/summary.%d{yyyy-MM-dd}.%i.log
        </fileNamePattern>
        <TimeBasedFileNamingAndTriggeringPolicy
            class="com.my.test.logger.async.MySizeTimeBasedPolicy">
            <maxFileSize>10MB</maxFileSize>
        </TimeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>
            %d{ISO8601} [%t] %p %c %L - %m%n
        </pattern>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

RollingPolicy由我的Custom Appenders正确扩展.

  • 我已将其导出为带有logback.xml的自定义jar.

  • 我将它添加到新java项目的classpath中.

  • 运行一些并发程序进行日志记录,以确保所有线程同时正确地记录它.

程序如下,我创建了TestLogger1,2 ... 5并运行它们.

 public class TestingLogger {
 private static Logger log = LoggerFactory.getLogger(TestingLogger.class);
   public static void main(String[] args) {
    LoggerContext …
Run Code Online (Sandbox Code Playgroud)

logging logback rollingfileappender appender log4j2

2
推荐指数
1
解决办法
5747
查看次数

“手动”滚动 log4net RollingFileAppender 日志文件?

我希望能够调用像“ResetLog”这样的方法,将我的“log.txt”复制到“log.txt.1”,然后清除log.txt,而不是在日期/时间或指定的最大大小之后滚动日志。

我尝试通过使用 FileAppender 而不是 RollingFileAppender 执行类似的操作来实现这一点:

var appenders = log4net.LogManager.GetRepository().GetAppenders();
foreach (var appender in appenders) {
    var fa = appender as log4net.Appender.FileAppender;
    if (fa != null) {
        string logfile = fa.File;
        fa.Close();
        string new_file_path = CreateNextLogFile(logfile);
        fa.File = new_file_path;
        fa.ActivateOptions();
    }
}            
Run Code Online (Sandbox Code Playgroud)

文件被关闭,并且 CreateNextLogFile() 对其进行重命名。然后,我创建一个新的日志文件并设置 FileAppender 来使用它。但是,我认为 ActivateOptions 会继续并使用所需的设置重新配置 FileAppender。我查看了 log4net 文档,没有看到任何其他公共方法允许我在关闭 FileAppender 后重新打开它。谁能推荐一种实现滚动的方法?如果 RollingFileAppender 有这样的东西那就太好了,但我也没有在它的文档中看到任何有用的东西。

log4net rollingfileappender fileappender

1
推荐指数
1
解决办法
1830
查看次数

Logback:是否可以将 TimeBasedRollingPolicy 与 SizeBasedTriggeringPolicy 结合起来?

我使用 LogbackTimeBasedRollingPolicy每小时滚动一次文件:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.log.zip</fileNamePattern>
    <maxHistory>168</maxHistory> <!--7Days-->
    <totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

有时,在我的情况下,原始(尚未滚动)日志文件可能会变得非常大(几个 GB)。我现在想SizeBasedTriggeringPolicy在配置中添加一个,以便在原始日志文件超过特定限制(例如 5GB)时额外滚动文件。因此,日志文件应该每小时滚动一次,除非文件变得很大,那么应该更早滚动。

我尝试过这个:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>${serverpath}/logs/history-debug/debug.%d{yyyy-MM-dd_HH}.%i.log.zip</fileNamePattern>
    <maxHistory>168</maxHistory> <!--7Days-->
    <totalSizeCap>2GB</totalSizeCap>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
    <maxFileSize>5GB</maxFileSize>
</triggeringPolicy>
Run Code Online (Sandbox Code Playgroud)

但随后我收到错误,因为它%i与 TimeBasedRollingPolicy 不兼容。

我也尝试过,SizeAndTimeBasedRollingPolicy但它只将滚动的文件分成更小的部分,但不查看原始日志文件的大小。

logging logback rollingfileappender

1
推荐指数
1
解决办法
2272
查看次数

像perl中的日志文件一样在特定大小之后旋转普通文件

我有一个用例,我直接写一个文件,并希望它像日志文件一样自动旋转.

一个解决方案我想到的是每一个写前检查文件的大小,如果大小超出其移动到filename.1(和其他文件,以增加有最后数和删除的最后一个文件,如果超过所需数量的文件,更多).

有没有更好的方法来做到这一点?

请注意,每次调用我的进程时,我只将文件写入文件一次.

perl rollingfileappender

0
推荐指数
1
解决办法
101
查看次数