小编Tim*_*ker的帖子

使用多个log4net文件记录器

我有文件appenders FileA,FileB和FileC.FileA我添加到根元素,因为我希望它是一个全部捕获,(更多内容见下文).FileB和FileC我用于特定的消息,并为每个appender创建命名记录器.在代码中,我加载了我用于大多数消息的日志,如下所示:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

其他记录器,我这样加载

private static readonly log4net.ILog commandLog = log4net.LogManager.GetLogger("LoggerFileB");
Run Code Online (Sandbox Code Playgroud)

发生的事情是我得到了我对LoggerFileB的期望,即只有特殊的消息.问题是这些消息也出现在LoggerFileA中,这是我添加到root的全部.我可以为catch-all创建一个特定的命名实例,而不是将其添加到根元素,但我希望调用类型作为输出中的记录器名称.创建命名记录器意味着%logger输出日志的名称而不是类型.有没有办法准确地得到我想要的东西(显示记录器名称作为类型,但不显示记录到其他命名记录器的消息)?希望我错过了一些东西,并且有一个简单的解决方案.

这是我的log.config在这种情况下的样子.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net>
        <appender name="FileA" type="log4net.Appender.RollingFileAppender">
            <file value="FileA.txt" />
            ...snip...
        </appender>
        <appender name="FileB" type="log4net.Appender.RollingFileAppender">
            <file value="FileB.txt" />
            ...snip...
        </appender>
        <appender name="FileC" type="log4net.Appender.RollingFileAppender">
            <file value="FileC.txt" />
            ...snip...
        </appender>
        <root>
            <level value="ALL" />
            <appender-ref ref="LoggerFileA" />
        </root>
        <logger name="LoggerFileB">
            <level value="ALL" />
            <appender-ref ref="FileB" />
        </logger>
        <logger name="LoggerFileC">
            <level value="ALL" />
            <appender-ref ref="FileC" />
        </logger>
    </log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)

log4net log4net-configuration

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

从字符串中获取整数月份值

我正在解析来自 AWS 的 cron 字符串,如下所示cron(0 7 13 November ? 2019)。有没有一种干净的方法可以返回November11使用 Go 的内置类型?该time.Month类型允许映射intstring,但似乎没有办法进行相反的操作。我错过了什么吗?现在,我写这个是为了得到map[string]int我正在使用的 a ,如下所示:monthi := getMonths()[monthName]

func getMonths() map[string]int {
    m := make(map[string]int)
    for i := 1; i < 13; i++ {
        month := time.Month(i).String()
        m[month] = i
    }
    return m
}
Run Code Online (Sandbox Code Playgroud)

string time go

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

通过命名数组提供内部列表访问

我有一个类,其中包含其他对象的内部列表,如下所示:

public class Parent
{
    List<Child> _children;
}
Run Code Online (Sandbox Code Playgroud)

孩子说的看起来像这样:

public class Child
{
    public string Name;
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是设置父级,其中可以访问_children的成员,如下所示:

...
Child kid = parentInstance["Billy"]; // would find a Child instance 
                                     // whose name value is Billy
...
Run Code Online (Sandbox Code Playgroud)

这可能吗?我显然可以这样做:

Child kid = parentInstance.GetChild("Billy");
Run Code Online (Sandbox Code Playgroud)

但我更喜欢数组/字典之类的语法.如果不是这样的话,这不是什么大不了的事,而且我不想为达到语法糖而跳过一百万圈.

.net c#

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

给定一个主键,是否可以找到 EF Core 模型中的所有外键?

我正在使用一个相当大的 EF 核心模型,该模型具有在代码中定义的所有表和关系,这些表和关系最终附加到上下文对象。如果我有主键,是否有一种干净/有效的方法来获取模型中的所有依赖列?

作为我正在使用的示例,此代码段用于查找给定表的主键名称(该表通过其类型 T 来识别,它是此代码所在函数的参数):

var keyName = context.Model.FindEntityType(typeof (T)).FindPrimaryKey().Properties.Select(x => x.Name).Single();
Run Code Online (Sandbox Code Playgroud)

entity-framework-core entity-framework-core-2.2

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

如何将多线程调用同步到同一方法

我有一个从多个线程调用的方法.每个线程都有自己的类实例.什么是同步访问代码最直接的方法?

我不能只用lock(obj)其中obj的一个实例成员,但它足以只需要声明obj的类静态?所以对该方法的所有调用都将锁定在同一个对象上?一个简单的说明如下:

class Foo
{
    static object locker = new object();

    public void Method()
    {
        lock(locker)
        {
            //do work
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:这位//do work正在写入数据库.为什么我需要序列化写入需要3个页面来解释这个特定的实例,我真的不想重温所有引导我到这一点的细节.我所要做的就是确保每个记录在写下一个记录之前完成了写作.

c# multithreading

0
推荐指数
1
解决办法
1983
查看次数