2012-04-30 151 views
0

经过很多问题,最后我设法为我的窗口服务配置了log4net。使用log4net记录多个程序集

我对它很新颖,今天我开始配置它。我有这些疑惑。

1)我需要将它用于多个程序集。假设我有一个组件'A',它被作为参考组装在'B'中,它是我的主要组件,在这里我引用了log4net。我需要记录组件'A'和'B'。

2)我的应用程序是多线程的,并使用大量的线程。那么log4net是线程安全的?

3)我在我的app.config中使用下面的配置。我不太清楚它有什么用处。但我不想使用不必要的参数。

<log4net> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="C:\logs\log.txt"/> 
     <param name="AppendToFile" value="true"/> 
     <rollingStyle value="Size"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="100KB"/> 
     <staticLogFileName value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/> 
     </layout> 
    </appender> 
</log4net> 
+0

你的问题是excactly? – LueTm

+0

问题在第1点和第2点完全指定 – sunder

+0

下次请使用问号(?),因此它更清晰。 – LueTm

回答

1

在appender部分下使用<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />。我斜纹提高了测井性能。

log4net是线程安全的。

<maximumFileSize value="10MB" /> //For 100 Kb configuration there will be lot of files. 

<datePattern value="_yyyyMMdd" /> //它会提示记录器在每个日期创建一个新文件。

为Logger创建一个静态类,并从您想要使用的每个程序集中调用静态函数。

样例类的日志记录:

public static class Logger 
    { 
     static Logger() 
     { 
      XmlConfigurator.Configure(); 
     } 

     public static void Log() 
     { 
      string methodName = new System.Diagnostics.StackFrame(1, true).GetMethod().Name; 
      string moduleName = new System.Diagnostics.StackFrame(1, true).GetMethod().ReflectedType.FullName; 

      var appLog = LogManager.GetLogger(loggername); 
      appLog.Error(...); 

     } 
    } 
+0

感谢您的回复,我只是在做同样的事情。假设我在程序集B中添加了作为参考的程序集A中的log4net引用。现在,如果我在程序集A中创建了一个静态类,它将使用log4net并且程序集B可以利用它,那么在这种情况下,log4net dll引用必须添加到程序集B中也。你说的话。 – sunder

+0

你不需要添加log4net dll在DLL B因为tou会使用dll登录。 –

+0

感谢罗米尔,我已经解决了问题。 log4net方法的引用仅在当前程序集中添加了说明A。所以我在下面的链接中创建了一个类,作为对稍后将阅读此文章的人的帮助。 http://actcode.com/2009/11/net-application-logging-with-log4net-in-console-file-database/ – sunder

0
  1. ,这不是一个问题;只需在程序集B中像平常一样使用ILog即可。
    只需确保在应用程序的生命周期中调用Configure()一次。
  2. 是的。
  3. 我建议您熟悉log4net。一个简单的google search或看看docs应该做的伎俩。
+0

我现在在做。我在程序集B中创建了添加的引用,并使用该对象ILog进行日志记录。在汇编A中,我没有添加log4net引用,现在有没有在我可以登录的两个程序集中添加log4net引用的方法。 在程序集B – sunder

+0

中添加了程序集A作为参考,因此,您在询问您是否可以在不引用它所定义的程序集的情况下使用ILog?答案显然是'不'... –

+0

在汇编B中我引用了log4net dll。为了记录程序集A,我是否需要再次在其中添加log4net引用。 – sunder

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

它将记录只在调试模式下,所以使配置如下条目:

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