标签: rollingfileappender

间歇性log4net RollingFileAppender锁定文件问题

我们在开发和生产机器上看到一个间歇性问题,我们的日志文件没有被记录.

使用Visual Studio在开发和调试中运行时,我们在VS输出窗口中收到以下log4net错误消息:

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file C:\folder\file.log.
Run Code Online (Sandbox Code Playgroud)

该进程无法访问文件"C:\ folder\file.log",因为它正由另一个进程使用.

log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.
Check your .config file for the <log4net> and <configSections> elements.
Run Code Online (Sandbox Code Playgroud)

配置部分应如下所示:

<section
  name="log4net"
  type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
Run Code Online (Sandbox Code Playgroud)

我们当前解决此问题的方法是重命名最后一个日志文件.我们当然希望这会失败(由于前面提到的文件锁定),但通常不会.由于aspnet_wp.exe进程的锁定,重命名一次或两次失败.

我们的log4net配置部分如下所示:

<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\folder\file.log"/>
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <rollingStyle value="Date" />
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="100" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Header]&#xA;"/>
      <footer value="[Footer]&#xA;"/>
      <conversionPattern value="%date %-5level %logger ${COMPUTERNAME} %property{UserHostAddress} [%property{SessionID}] …
Run Code Online (Sandbox Code Playgroud)

log4net locking rollingfileappender

110
推荐指数
3
解决办法
5万
查看次数

Log4Net:Rolling File appender,定义扩展

我希望我的日志文件看起来像这样:2009-02-13.log

但问题是我似乎无法找到任何方法来添加.log扩展名.

我尝试了很多东西,但没有任何帮助.这是我迄今为止所拥有的:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs/Log4Net/.log"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value="yyyy-MM-dd" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
</appender>
Run Code Online (Sandbox Code Playgroud)

log4net config rollingfileappender

66
推荐指数
4
解决办法
3万
查看次数

Log4j2 DefaultRolloverStrategy的max属性如何真正起作用?

RollingRandomAccessFileAppender只配置了一个OnStartupTriggeringPolicyset,但是当我将max属性设置DefaultRolloverStrategy为某个数字时,日志会无限期地生成超过该数量.

这是我的log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <RollingRandomAccessFile 
            name="RollingRAF" 
            fileName="logs/app.log"
            filePattern="logs/app-%d{dd-MMM-yyyy@HH.mm.ss}.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="myLogger" level="warn">
            <AppenderRef ref="RollingRAF"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

是因为我的名字模式中没有迭代器吗?

是因为我的文件名精度设置为秒?

是因为我只有OnStartupTriggeringPolicy这套?

或者这里发生了什么?

我的目标是设置滚动配置,记录最近5次应用程序运行.

java configuration logging rollingfileappender log4j2

26
推荐指数
1
解决办法
3万
查看次数

如何使用log4net将RollingFileAppender配置为按日期和大小滚动?

我配置log4net以使用复合RollingFileAppender,以便当前文件始终命名为logfile.log,所有后续文件都命名为logfile-YYYY.MM.dd.seq.log,其中seq是序列号,如果日志超过特定大小在一天之内.不幸的是,我在配置这样的设置方面收效甚微.

编辑:

我当前的配置粘贴在下面.它已根据几个答案进行了更新,使我足够接近我的需求.这将生成以下格式的文件:logfile_YYYY.MM.dd.log.seq

<log4net>

    <root>
        <level value="DEBUG" />
        <appender-ref ref="RollingFileAppender" />
    </root>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="logs\\logfile"/>
        <staticLogFileName value="false"/>
        <appendToFile value="true"/>
        <rollingStyle value="Composite"/>
        <datePattern value="_yyyy.MM.dd&quot;.log&quot;"/>
        <maxSizeRollBackups value="10"/>
        <maximumFileSize value="75KB"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="DEBUG" />
            <param name="LevelMax" value="FATAL" />
        </filter>
    </appender>

</log4net>
Run Code Online (Sandbox Code Playgroud)

一个有趣的说明,设置

<staticLogFileName value="false"/>
Run Code Online (Sandbox Code Playgroud)

为true会导致记录器不写入任何文件.

xml configuration log4net composite rollingfileappender

25
推荐指数
1
解决办法
6万
查看次数

使用Log4Net时,为什么在文件名上附加两次日期?

我试图将日期添加到我的日志文件名中,并且我能够通过遵循我在stackoverflow中找到的一些建议来使其工作.一切正常,但由于某种原因,第一个文件总是有两次附加日期.

例如,而不是log.2009-02-23.log,我得到log.2009-02-23.log.2009-02-23.log.

我发现它很奇怪,而且这是一个非常简单的代码.这不像我在多线程环境中运行它.

我的log4net配置:

<log4net>
<appender name="MyLog" type="log4net.Appender.RollingFileAppender">
    <file value="../../Logs/Mylog"/>
    <staticLogFileName value="false" />
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <datePattern value=".yyyy-MM-dd.lo\g" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{DATE} [%t] %-5p %c - %m%n"/>
    </layout>
</appender>
<root>
    <level value="INFO"/>
    <appender-ref ref="MyLog"/>
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

编辑:我想添加有关我正在测试的环境的信息.
- asp.net
- .net framework 2.0
- windows server 2003 64位服务包2
- log4net 1.2.10

log4net rollingfileappender

21
推荐指数
2
解决办法
8260
查看次数

log4j RollingFileAppender创建的日志文件的权限

如何RollingFileAppender确定创建的文件权限?

我最近更改了一个守护程序进程,我必须以非root用户身份运行,现在正在创建具有权限的文件0600(只有所有者可读),但我希望它们可被所有或至少成员读取管理员组(06440640).我的tomcat应用程序创建的文件总是0644(所有人都可读).

我不知道我是否无意中改变了其他内容,或者是否与该用户的权限有关.我将父目录0777作为测试,它似乎没有帮助(它是0755).显然不是什么大不了,因为我可以sudo看看它们,但相当烦人,如果我必须有一个客户为我复制它将是一个问题.

环境是Ubuntu 10.04LTS jsvc/commons-daemon用来运行守护进程.如果重要的是我的log4j配置的基础知识:

<!DOCTYPE log4j:configuration SYSTEM 'log4j.dtd'>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">

<appender name="StdOutAppender" class="org.apache.log4j.ConsoleAppender">
    <!-- only send error / fatal messages to console (catalina.out) -->
    <param name="threshold" value="${log4j.StdOutAppender.threshold}" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
        <!--%d{dd-MMM-yyyy HH:mm:ss.SSS} [%5p] %c{2}.%M [line:%L]: %m%n-->
    </layout>
</appender>

<appender name="TimeBasedRollingFileAppender" class="org.apache.log4j.rolling.RollingFileAppender">
    <param name="append" value="true" />
    <param name="encoding" value="UTF-8" /> …
Run Code Online (Sandbox Code Playgroud)

java file-permissions log4j rollingfileappender

19
推荐指数
3
解决办法
3万
查看次数

RollingFileAppender中的FileNamePattern - logback配置

我的logback配置文件中有以下RollingFileappender.

<appender name="RollingFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <File>C:\Files\MyLogFile.log</File>      
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
  <FileNamePattern>C:\Files\MyLogFile.%d{yyyy-MM-dd}.log</FileNamePattern>       
  <MaxHistory>30</MaxHistory>     
  </rollingPolicy>      
  <encoder>
      <pattern>%date %level [%thread] %logger{60} [%file:%line] %msg%n</pattern>
    </encoder> 
  </appender>
Run Code Online (Sandbox Code Playgroud)

它确实将文件作为MyLogFile.log写入上述目录,但不附加日期中指定的日期FileNamePattern.任何想法我如何设法在我的fileName中追加日期.谢谢.

logback rollingfileappender

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

Log4Net多个记录器

首先,我在其他主题中看到了很多答案和提示(最相似的是:Log4Net:多个记录器),但没有适用的答案.

我希望有2个记录器具有不同的文件追加器,并限制每个记录器写入根记录器.它是控制台应用程序.以下全部代码:

using System;
using System.Diagnostics;
using System.Linq;
using log4net;

namespace Test_log4net
{
class Program
{
    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();

        ILog logger = LogManager.GetLogger("Async");
        logger.Info("started async");
        Console.WriteLine("Logger: {0}", (logger as log4net.Core.LogImpl).Logger.Name);
        Console.WriteLine("Appenders: {0}", string.Join(", ", (logger as log4net.Core.LogImpl).Logger.Repository.GetAppenders().ToList().Select(appendr => appendr.Name)));


        ILog logger2 = LogManager.GetLogger("Sync");
        logger2.Info("started sync"); //changed: from logger -> to logger2 on 10/21/2014
        Console.WriteLine("Logger: {0}", (logger2 as log4net.Core.LogImpl).Logger.Name);
        Console.WriteLine("Appenders: {0}", string.Join(", ", (logger2 as log4net.Core.LogImpl).Logger.Repository.GetAppenders().ToList().Select(appendr => appendr.Name)));

        Console.ReadKey();
    }       
}
}
Run Code Online (Sandbox Code Playgroud)

和App.config文件:

<?xml version="1.0" encoding="utf-8" …
Run Code Online (Sandbox Code Playgroud)

logging rollingfileappender log4net-configuration

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

Log4j,禁用依赖于环境的appender

我想有一个log4j.xml配置,并能够在开发我的应用程序时登录到控制台.一旦部署到环境,我只想登录文件appender而不是控制台.我怎样才能做到这一点?

这是我目前的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log-base-dir}/${adapter-name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="99" />
        <param name="append" value="true" />        
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="info" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="LogFileAppender" />
    </root>

</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)

java log4j rollingfileappender

13
推荐指数
2
解决办法
8329
查看次数

log4j属性DailyRollingFileAppender不起作用

我希望每日日志的日志文件附加yyyy-dd-mm格式的日期.当我使用DailyRollingFileAppender时,不会创建新的日志文件.日志将写入同一日志文件.此外,不考虑提供的日期模式.创建的日志文件是LoggerFile.log.并且每个内容(即使在第二天)都会写入此文件.

我正在使用log4j-1.2.17 jar.我正在使用Java开发Netbeans 7.3.1.

是否有人使用此JAR并面临这样的问题.请帮忙!

这是我使用的属性文件的内容:

# Root logger option
log4j.rootLogger=ERROR,FILE,stdout

# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

log4j.appender.FILE.File=.//..//logs//LoggerFile.log

# Define the layout for file appender
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS zzz} %5p     %c{1}:%L - %m%n

log4j.appender.FILE.MaxFileSize=10MB


# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L -  %m%n`
Run Code Online (Sandbox Code Playgroud)

java logging netbeans log4j rollingfileappender

13
推荐指数
2
解决办法
4万
查看次数