我希望log4net将日志文件(使用RollingFileAppender)写入公共应用程序数据文件夹的子文件夹(例如C:\ Documents and Settings\All Users\Application Data\Company\Product\Logs).
但是,在Win XP上,没有指定此文件夹的环境变量.我们有%ALLUSERSPROFILE%,%APPDATA%但没有什么比这更好的了%ALLUSERSAPPDATA%.
以编程方式,我可以使用Environment.SpecialFolder.CommonApplicationData,但我需要将它放在log4net配置中,如下所示:
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="%ALLUSERSAPPDATA%\Company\Product\Logs\error.log" />
</appender>
Run Code Online (Sandbox Code Playgroud)
好的,我们可以在我们的设置中定义这个,但也许有人提出了一个更好的主意?
我们有一个ASP .Net应用程序,我们使用Log4Net来记录应用程序中的详细信息 - 没有新内容 - 滚动日志文件名的格式通常为:
rolling-log.txt
rolling-log.txt.1
rolling-log.txt.2 etc.
Run Code Online (Sandbox Code Playgroud)
应用程序的每个用户都添加到日志文件中,对于特定用户的情况,日志文件可能难以阅读,因此,我们希望以某种方式修改配置文件以单独记录用户的日志详细信息,每次写入特定文件,例如
<applicationId>rolling-log.txt
<applicationId>rolling-log.txt.1
<applicationId>rolling-log.txt.2
etc.
Run Code Online (Sandbox Code Playgroud)
每个用户的唯一应用程序ID在哪里,由五位数字组成,例如
12345rolling-log.txt
Run Code Online (Sandbox Code Playgroud)
关于实现这个的最佳方法的任何想法,假设它是可能的?
干杯
布雷特
我终于尝试了我的WPF桌面应用程序的log4net.
我正在努力解决RollingFileAppender没有内置支持多实例应用程序的事实.
我不喜欢将应用程序限制为单个实例只是为了让logger满意.单一的手术技巧都是丑陋的黑客.
在日志文件的文件名中使用进程ID也不够好.这有可能占用无限空间,因为RollingFileAppender在这种情况下是无用的.
一种解决方案可能是将日志发送到不同的进程,这将负责将输出序列化为文件.但这会带来新的麻烦.
你对此有何看法?
我有第三方使用如下所示的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
<!--Others sections-->
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value=".\logs\logclient.txt" />
<appendToFile value="false" />
<rollingStyle value="Date" />
<maximumFileSize value="1000KB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
第三方中的代码如下所示:
LogManager.GetRepository(Assembly.GetCallingAssembly()), configFile);
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)
我希望第三方dll使用我自己的配置文件中定义的自己的appender.我该如何管理这个?
NB:
我阅读了有关以编程方式更改日志目录的大多数相关主题,但答案有点高级.
我的问题是尝试动态更改从我的C#应用程序保存日志文件的位置.我有一个带有浏览按钮的文本框,可以选择保存的位置.
任何人都有想法或者可以用一些代码指出我正确的方向?我尝试过类似的想法,但似乎无法做到正确.
有没有办法使 fileAppender 变量的名称?即当我在我的控制器上调用一个带有对象的操作时,我想将其写入日志文件。该文件的名称类似于:yyyyMMdd_hhmssms_[controller]_[method].json
这是我的配置文件中的内容:
<appender name="JsonFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="c:\temp\" />
<datePattern value="yyyyMMdd_hh.mm.ss.ms_%thread{CommonApplicationData}'.json'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%message%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
这将返回以下文件名:20160224_01.30.28.3028_P1rea24{Co30onApplicPionDaPa}.json