相关疑难解决方法(0)

如何从头开始以编程方式配置log4net(无配置)

这是一个坏主意,我知道,但是...我想从头开始以编程方式配置log4net,没有配置文件.我正在为我和我的团队开发一个简单的日志记录应用程序,用于我们负责的一些相对较小的部门应用程序.我希望他们都登录到同一个数据库.日志记录应用程序只是log4net的一个包装器,预先配置了AdoNetAppender.

所有应用程序都是ClickOnce部署的,这对部署配置文件提出了一个小问题.如果配置文件是核心项目的一部分,我可以设置其属性以使用程序集进行部署.但它是链接应用程序的一部分,因此我无法选择将其与主应用程序一起部署.(如果那不是真的,请有人告诉我).

可能因为它是一个坏主意,似乎没有太多的示例代码可用于从头开始以编程方式配置log4net.这是我到目前为止所拥有的.

Dim apndr As New AdoNetAppender()
apndr.CommandText = "INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)"
apndr.ConnectionString = connectionString
apndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
apndr.CommandType = CommandType.Text
Dim logDate As New AdoNetAppenderParameter()
logDate.ParameterName = "@log_date"
logDate.DbType = DbType.DateTime
logDate.Layout = New RawTimeStampLayout()
apndr.AddParameter(logDate)
Dim logLevel As New AdoNetAppenderParameter()
logLevel.ParameterName = "@log_level"
'And so forth...
Run Code Online (Sandbox Code Playgroud)

配置完所有参数后apndr,我首先尝试了这个...

Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy) …
Run Code Online (Sandbox Code Playgroud)

.net logging log4net

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

Log4Net:以编程方式指定多个记录器(具有多个文件追加器)

如何(以编程方式,没有xml配置)使用Log4Net配置多个记录器?我需要他们写入不同的文件.

c# log4net

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

使用xml文件配置log4net

我尝试配置log4net以将所有内容记录到控制台输出.我有一个名为的配置文件Log4Net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我有我的主要课程(只是一个测试案例)

namespace TestLog4Net {
    class Program {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args) {
            log.Info("Info");
            log.Error("Error");
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我把这些线添加到了 AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(
ConfigFile = "Log4Net.config", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

但现在没有记录,有人可以解释一下吗?

.net logging log4net

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

从第三方重定向log4net日志

我有第三方使用如下所示的配置文件:

<?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# log4net

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

从代码中使用XML配置log4net或NLog

最近我一直致力于一个项目,其中包括我们想要提供一个集中配置系统.我们使用WCF,Silverlight,C#等来创建分布式服务和客户端系统.我们要配置的一件事是记录.显然,我们可以通过app.config或单独的日志配置文件配置log4net或NLog.我们也可以通过代码配置.我想看看是否可以通过代码从XML进行配置.换句话说,假设您在内存中(可能从数据库中读取?)配置任一日志框架所需的整个XML.可以吗?是否可以通过包含正确形成的字符串(在特定日志框架的上下文中)配置log4net和/或NLog,而不是从文件读取或通过"

我已经想出了如何为每个这些日志框架做到这一点.我不确定我们是否真的会使用它,但我认为我会在这里分享它,以防万一其他人可能会发现它有用.另外,请随意评论以这种方式配置日志框架的可行性(或不可行性).

我能想到的两个明显的潜在问题是:

  1. 构造有效的XML(或在数据库中输入)可能很困难.我的第一个猜测是,人们将以与今天相同的方式定义XML.将它放在app.config(或外部配置)文件中,然后运行测试程序以验证XML是否产生预期结果.

  2. 更新数据库中的XML然后让程序/服务/对变化作出反应(比如使用log4net的ConfigureAndWatch选项)是多么容易或困难(或不可能)?我对程序或服务如何知道XML已更新的机制不感兴趣.我们假设程序将定期检查数据库.给定一个新的XML字符串,很容易重新配置日志框架.

我将发布我的技术作为这个问题的答案.

logging log4net nlog

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

标签 统计

log4net ×5

logging ×3

.net ×2

c# ×2

nlog ×1