小编Mar*_*ijn的帖子

Log4Net/C# - 禁用默认日志记录

我在C#项目中使用log4net,在生产环境中,我想禁用所有日志记录,但是当发生一些致命错误时,它应该将所有以前的512条消息记录到文件中.我已经成功配置了这个,它是工作正常.当发生致命错误时,它会将消息记录到文件中.

但是当我从Visual Studio运行它时,我可以看到所有日志消息都写入Output窗口,无论它是否是致命的.(当我从Windows资源管理器运行时,我无法看到这些消息 - 我的应用程序是一个WinForm exe,并且没有控制台窗口可以看到输出)

有没有办法禁用此日志记录?我只需要在文件中记录我的日志,当发生一些致命错误时也是如此.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net debug="false">

        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="1MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>

        <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
            <bufferSize value="512" />
            <lossy value="true" />
            <evaluator type="log4net.Core.LevelEvaluator">
                <threshold value="FATAL"/>
            </evaluator>
            <appender-ref ref="RollingFileAppender" />
        </appender> 

        <root>
            <level value="DEBUG" />
            <appender-ref ref="BufferingForwardingAppender" />          
        </root>
    </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这就是我在Windows窗体的静态初始化程序中配置它的方法.

static Window1() …
Run Code Online (Sandbox Code Playgroud)

c# log4net

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

在多个配置文件中重新定义spring.net对象

我正在使用spring.net IOC依赖注入为我的asp.net Web应用程序设置我的xml配置文件.我在web.config中引用了每个配置文件.spring.net配置文件(settings.xml)中的设置示例如下:

<object id="obj1"
      type="NS.Common.Cache.Class, NS.Common"
      singleton="true"
      init-method="Initialize"
      destroy-method="Dispose">
  <property name="Name" value="My Name" />
</object>
Run Code Online (Sandbox Code Playgroud)

一切正常.

现在我在多个环境中安装我的Web应用程序,所以我正在为环境创建一个spring.net配置文件,例如.dev,qa,prod.

因此,在安装应用程序时,web.config中会引用适用的环境spring文件.这是自动安装程序的一部分.

在qa环境文件中,我想将"obj1"上面的对象重新定义为:

<object id="obj1"
    type="NS.Common.Cache.Class2, NS.Common"
    singleton="true"
    init-method="Initialize"
    destroy-method="Dispose">
  <property name="Name" value="My New Name" />
</object>
Run Code Online (Sandbox Code Playgroud)

但是,由于这是自动的(添加对环境文件的引用),因此不会更改settings.xml文件.

现在引用具有相同id的已定义对象的2个文件 - 这会导致主要问题,因为将发生运行时错误.

是否有任何方法可以包含在qa.xml和flag等中以突出显示此对象定义覆盖具有相同对象ID的任何其他xml文件中的任何其他已定义对象?

c# dependency-injection spring.net inversion-of-control

7
推荐指数
2
解决办法
2146
查看次数

连接到专用远程MSMQ队列

我正在尝试使用以下路径连接到远程私有MSMQ队列:

"FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"The specified format name does not support the requested operation. For example, a direct queue format name cannot be deleted."
Run Code Online (Sandbox Code Playgroud)

我显然做错了什么.但是,这确实可以使用本地队列.

我正在使用Spring.Net的Messaging.这是我的配置

<objects xmlns="http://www.springframework.net">
  <object id="myQueue" type="Spring.Messaging.Support.MessageQueueFactoryObject, Spring.Messaging">
    <property name="Path" value="FormatName:DIRECT=OS:remoteMachineName\Private$\MyQueue"/>
  </object>

  <object id="messageQueueTemplate" type="Spring.Messaging.Core.MessageQueueTemplate, Spring.Messaging">
    <property name="DefaultMessageQueueObjectName" value="myQueue"/>
  </object>

  <object id="messageGateway" type="My.MessageGateway, My.Assembly">
    <property name="MessageQueueTemplate" ref="messageQueueTemplate"/>
  </object>
</objects>
Run Code Online (Sandbox Code Playgroud)

msmq spring.net

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

.NET中的DDD /聚合

我一直在阅读Evans关于DDD的书,并且正在考虑如何在.NET中实现聚合.目前,我只能想出一个方法; 在单独的类库中隔离聚合.然而,这看起来有点过分(我更喜欢将所有域对象保存在一个库中),我想知道是否有不同的方法?

1 lib/aggregate的原因如下:聚合根需要知道它负责对"子对象"的所有访问,聚合根也可以返回子对象作为其成员的结果.因此,这些子对象的成员(聚合根所需)不能公开.因此,您唯一的选择是将它们设置为内部(因为它们仍然需要由聚合根调用).但是,通过将所有聚合放在一个项目中,仍然可以从已获取子对象的其他域对象访问这些成员.这是不合需要的,因为它允许绕过聚合根.通过分离不同库中的所有聚合,解决了这个问题.

一些额外的信息:

我查看了DDD java示例代码,并将每个聚合(包括所有子对象的类)打包到另一个包中.只能从聚合根调用的成员没有访问修饰符(例如:) Delivery.updateOnRouting.在java中,没有访问修饰符的成员是包私有的(仅在同一个包中可用).所以这将是正确的行为.

.NET代码示例,但是,将所有的域对象在一个类库,然后使相应的成员公开.对我来说,这似乎是不正确的.

.net java architecture design-patterns domain-driven-design

6
推荐指数
2
解决办法
1273
查看次数

是否可以在App.config文件中的appSettings中引用主目录?

我在Visual Studio(2010)中有这个C#项目,我想<appSettings>在项目的App.config文件的部分中引用我的主目录中的文件.也就是说,我使用这种语法:

<appSettings>
    <add key="Database" value="sqlite:///C:\Users\arvek\test.db3" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

是否可以通过变量引用我的主目录(C:\ Users\arvek)而不是直接硬编码?F.ex.:value ="sqlite:/// $ HOME\test.db3".

.net c# app-config

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

查询问题 - 在sql导航器中运行查询时返回行,但不在我的c#程序中

在此输入图像描述

更新:

这是来自调试器的查询,它是从字符串生成器中检索的:

{SELECT * FROM FCR.V_REPORT WHERE DATE BETWEEN to_date('14/09/2001' , 'dd/mm/yyyy') AND to_date('30/09/2011' , 'dd/mm/yyyy')}
Run Code Online (Sandbox Code Playgroud)

如果删除大括号并在导航器中将其发布,则可以正常工作.

原版的:

我在运行程序时遇到问题.sql navigator中的查询返回192行,但是当我在c#(visual studio 2010)上运行查询时,查询返回0行.下面是我的c#代码:

public static DataTable GetReport(string date1, string date2)
{
  DatabaseAdapter dba = DatabaseAdapter.GetInstance();
  string SqlQuery =
    string.Format(@"SELECT * 
                  FROM FCR.V_REPORT 
                  WHERE DATE BETWEEN to_date('{0}' , 'dd/mm/yyyy')
                    AND to_date('{1}' , 'dd/mm/yyyy')", date1, date2);
  OracleDataReader reader = dba.QueryDatabase(SqlQuery);
  DataTable dt = new DataTable();
  dt.Load(reader);
  int temp = dt.Rows.Count;
  return dt;
}
Run Code Online (Sandbox Code Playgroud)

这是我在sql navigator中使用的查询(返回192行):

SELECT * 
FROM FCR.V_REPORT
WHERE DATE BETWEEN to_date('01/01/2001' …
Run Code Online (Sandbox Code Playgroud)

c# sql asp.net oracle10g oracle11g

6
推荐指数
2
解决办法
878
查看次数

从Spring.NET xml配置访问ConfigurationManager.AppSettings值

我有一个要求,要求我使用Spring.net来获取存储在app.config中的连接字符串,然后将检索到的连接字符串注入实例化对象.

我怎么能用Spring.net的xml配置呢?

例如,而不是我的代码执行此操作:

// Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
    <constructor-arg type="System.String" value="myConnectionName"/>
</object>

// Web.config:
<connectionStrings>
    <add name="myConnectionName" connectionString="DB_connectionstring"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
// Codes:
public class MyService {
    public MyService(string connectionName) {
        var connectionString = ConfigurationManager.AppSettings[connectionName];
        // use connectionString to create a DB connection, etc
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这样:

 // Spring.net config:
<object name="myService" type="com.acme.MyService, com.acme">
    <constructor-arg type="System.String" ref="retrievedConnectionString"/>
</object>    
// How to make a call similar to "ConfigurationManager.AppSettings[connectionName]" and get the connection string from Web.config and put inside "retrievedConnectionString"?

// Web.config: …
Run Code Online (Sandbox Code Playgroud)

.net configuration configurationmanager connection-string spring.net

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

如何使用log4net配置Spring.NET中的日志记录?

我想从Spring.NET Aspect库使用Logging方面和log4Net.我发现这篇文章如何将log4Net与Common Logging API一起使用.

我的测试应用程序是控制台,基于.NET 4.0客户端配置文件.

第一次尝试

所以我在我的项目中引用这些库:

  • Spring.Core版本1.3.2.40943,运行时版本v4.0.30319
  • Spring.AOP版本1.3.2.40943,运行时版本v4.0.30319
  • Common.Logging版本:1.2.0.0,运行时v1.0.3705

上面的程序集来自Program Files\Spring.NET 1.3.2\bin \net\4.0

  • log4net版本:1.2.10.0,运行时版本2.00.50727

我在Program Files\Spring.NET 1.3.2\bin \net\4.0中找不到程序集Common.Logging.Log4Net.dll 所以我从SourceForge下载这个程序集:

  • Common.Logging.Log4Net版本2.0.0.0运行时v2.0.50727

我在app.config中配置了logger:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
      <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
      </sectionGroup>
      <sectionGroup name="common">
        <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
      </sectionGroup>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <common>
    <logging>
      <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
        <arg key="configType" value="INLINE" />
      </factoryAdapter>
    </logging>
  </common>

  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] …
Run Code Online (Sandbox Code Playgroud)

log4net spring.net log4net-configuration

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

温莎城堡 - 用瞬态生活方式释放拦截器

它在陈述的文件,你应该总是短暂的拦截.如果我有这个示例代码;

//register interceptor
container.Register(Classes.FromAssemblyNamed("Sample.Interceptors")
.BasedOn<Castle.DynamicProxy.IInterceptor>()
.LifestyleTransient());

//Configure components to intercept
 container.Register(Classes.FromAssemblyNamed("Sample.Component")
.IncludeNonPublicTypes().InNamespace("Sample.Component", true)
            .Configure(c=>
                c.Interceptors(InterceptorReference.ForType<SampleInterceptor>())
                 .Anywhere.LifestyleSingleton())
                 .WithService.DefaultInterfaces()
                );
Run Code Online (Sandbox Code Playgroud)

我是否应该担心发布SampleInterceptor,或者Sample.Component在容器释放服务后是否会自动释放?

castle-windsor interceptor

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

使用@variable来@import另一个LESS文件

我想用@variable(@variable:"file.less")将file.less导入main .less.

我试过这种方式:

@var: 'file.less';
@import @var
Run Code Online (Sandbox Code Playgroud)

或者这样:

@import "@var"
Run Code Online (Sandbox Code Playgroud)

要么:

@import "@{var}"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有任何想法吗?

css variables import less

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