服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# log4net 日志输出的实现示例

C# log4net 日志输出的实现示例

2022-12-07 11:37letisgo5 C#

本文主要介绍了C# log4net 日志输出的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

思路:
1.安装插件:安装log4net
2.使用配置:添加log4net.config配置文件
3.输出日志文件格式:添加日志配置
4.AssemblyInfo.cs中配置

第一步:安装log4net

C# log4net 日志输出的实现示例

C# log4net 日志输出的实现示例

第二步:添加log4net.config配置文件

新增log4net.config配置文件,内容如下,与Program.cs同一目录即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    </configSections>
    <log4net>
        <!--level取值:OFF FATAL ERROR WARN INFO DEBUG ALL -->
        <logger name="loginfo">
            <level value="ALL"/>
            <appender-ref ref="InfoAppender"/>
        </logger>
        <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
            <param name="File" value="log\\"/>
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
            <param name="AppendToFile" value="true"/>
            <param name="MaxFileSize" value="10240"/>
            <param name="StaticLogFileName" value="false"/>
            <param name="DatePattern" value="yyyy-MM-dd&quot;.txt&quot;"/>
            <param name="RollingStyle" value="Date"/>
            <layout type="log4net.Layout.PatternLayout">
                <param name="ConversionPattern" value="%d [%p] - %m%n"/>
            </layout>
        </appender>
    </log4net>
</configuration>

并设置 – 属性 – 复制到输出目录为:始终复制

C# log4net 日志输出的实现示例

第三步:添加日志配置

在文件Program.cs应用程序主入口加入:

?
1
LogUtils.SetConfig(new FileInfo(Application.StartupPath + @"\log4net.config"));

C# log4net 日志输出的实现示例

LogUtils.cs 写入日志公共类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
class LogUtils
{
    private static readonly ILog loginfo = LogManager.GetLogger("loginfo");
 
    /// <summary>
    /// 从缺省配置文件获取日志配置
    /// </summary>
    public static void SetConfig()
    {
        XmlConfigurator.Configure();
    }
 
    /// <summary>
    /// 从指定配置文件获取日志配置
    /// </summary>
    /// <param name="configFile">指定的配置文件</param>
    public static void SetConfig(FileInfo configFile)
    {
        XmlConfigurator.Configure(configFile);
    }
 
    /// <summary>
    /// 生成分类日志
    /// </summary>
    /// <param name="info">日志信息</param>
    /// <param name="dirName">保存目录名,形如d:\log\aaa</param>
    private static void WriteSortLog(string info, string dirName)
    {
        try
        {
            if (false == System.IO.Directory.Exists(dirName))
            {
                System.IO.Directory.CreateDirectory(dirName);
            }
            string path = dirName + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
            StreamWriter sw = new StreamWriter(path, true, System.Text.Encoding.Default);
            sw.WriteLine(DateTime.Now.ToString("HH:mm:ss: ") + info);
            sw.Close();
        }
        catch (Exception ex)
        {
            string expMsg = "WriteSortLog异常:" + ex.Message + Environment.NewLine + ex.StackTrace;
 
            if (ex.InnerException != null)
                expMsg += Environment.NewLine + "InnerException:" + ex.InnerException.Message;
 
            Error(expMsg, ex);
        }
    }
 
    /// <summary>
    /// Info级 常规日志
    /// </summary>
    /// <param name="info">日志信息</param>
    public static void Info(string info)
    {
        if (loginfo.IsInfoEnabled)
        {
            loginfo.Info(info);
        }
    }
 
    /// <summary>
    /// Info 先生成常规日志,然后在指定目录另外创建一份日志
    /// 主要用来需要对日志进行分类时使用
    /// </summary>
    /// <param name="info"></param>
    /// <param name="dirName"></param>
    public static void Info(string info, string dirName)
    {
        if (loginfo.IsInfoEnabled)
        {
            //生成常规日志
            loginfo.Info(info);
 
            //生成分类日志
            WriteSortLog(info, dirName);
        }
    }
 
    /// <summary>
    /// Debug级 常规日志
    /// </summary>
    /// <param name="info">日志信息</param>
    public static void Debug(string info)
    {
        if (loginfo.IsDebugEnabled)
        {
            loginfo.Debug(info);
        }
    }
 
    /// <summary>
    /// Debug级 异常日志
    /// </summary>
    /// <param name="info">日志信息</param>
    /// <param name="exp">异常信息</param>
    public static void Debug(string info, Exception exp)
    {
        if (loginfo.IsDebugEnabled)
        {
            loginfo.Debug(info, exp);
        }
    }
 
    /// <summary>
    /// Error级 常规的日志
    /// </summary>
    /// <param name="info">日志信息</param>
    public static void Error(string info)
    {
        if (loginfo.IsErrorEnabled)
        {
            loginfo.Error(info);
        }
    }
 
    /// <summary>
    /// Error 异常日志
    /// </summary>
    /// <param name="info">日志信息</param>
    /// <param name="exp">异常信息</param>
    public static void Error(string info, Exception exp)
    {
        if (loginfo.IsErrorEnabled)
        {
            loginfo.Error(info, exp);
        }
    }
 
    /// <summary>
    /// Fatal级 常规日志
    /// </summary>
    /// <param name="info">日志信息</param>
    public static void Fatal(string info)
    {
        if (loginfo.IsFatalEnabled)
        {
            loginfo.Fatal(info);
        }
    }
 
    /// <summary>
    /// Fatal级 异常日志
    /// </summary>
    /// <param name="info">日志信息</param>
    /// <param name="exp">异常信息</param>
    public static void Fatal(string info, Exception exp)
    {
        if (loginfo.IsFatalEnabled)
        {
            loginfo.Fatal(info, exp);
        }
    }
 
    /// <summary>
    /// Warn级 常规日志
    /// </summary>
    /// <param name="info">日志信息</param>
    public static void Warn(string info)
    {
        if (loginfo.IsWarnEnabled)
        {
            loginfo.Warn(info);
        }
    }
 
    /// <summary>
    /// Warn级 异常日志
    /// </summary>
    /// <param name="info">日志</param>
    /// <param name="exp">异常信息</param>
    public static void Warn(string info, Exception exp)
    {
        if (loginfo.IsWarnEnabled)
        {
            loginfo.Warn(info, exp);
        }
    }
}

第四步:AssemblyInfo.cs中配置 Watch = true

在项目Properties文件夹下AssemblyInfo.cs中加入:

?
1
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

C# log4net 日志输出的实现示例

最后通过

?
1
2
3
LogUtils.Error(“错误日志”);
LogUtils.Info(“正常输出日志”);
LogUtils.Warn(“温馨提示日志”);

最后启动项目:会在项目debug目录下输出日志文件夹log内

到此这篇关于C# log4net 日志输出的实现示例的文章就介绍到这了,更多相关C# log4net 日志输出内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_16771097/article/details/120845149

延伸 · 阅读

精彩推荐
  • C#C# Newtonsoft.Json 的使用说明

    C# Newtonsoft.Json 的使用说明

    这篇文章主要介绍了C# Newtonsoft.Json 的使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    enych7822022-10-27
  • C#dotNet中的反射用法入门教程

    dotNet中的反射用法入门教程

    这篇文章主要介绍了dotNet中的反射用法,较为详细的分析了.Net中关于反射的概念,使用方法与相关注意事项,需要的朋友可以参考下...

    礼拜一11842021-11-11
  • C#C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    这篇文章主要介绍了C#获取机器码的方法,结合实例形式详细分析了C#获取硬件机器名、CPU编号、硬盘编号、网卡mac等信息的相关实现方法,需要的朋友可以参...

    mn-soft.com12152021-11-30
  • C#C#学习笔记之飞行棋项目

    C#学习笔记之飞行棋项目

    这篇文章主要为大家详细介绍了C#控制台实现飞行棋项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Light_Laser11002022-11-25
  • C#C#使用checkedListBox1控件链接数据库的方法示例

    C#使用checkedListBox1控件链接数据库的方法示例

    这篇文章主要介绍了C#使用checkedListBox1控件链接数据库的方法,结合具体实例形式分析了数据库的创建及checkedListBox1控件连接数据库的相关操作技巧,需要的朋...

    a7719485247592022-01-12
  • C#基于C#实现网络爬虫 C#抓取网页Html源码

    基于C#实现网络爬虫 C#抓取网页Html源码

    这篇文章主要为大家详细介绍了基于C#实现网络爬虫的相关资料,即C#抓取网页Html源码,感兴趣的小伙伴们可以参考一下...

    小虾Joe11562021-11-16
  • C#c# 接口使用实例

    c# 接口使用实例

    这篇文章主要介绍了c#接口使用的实例,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    莫得感情的代码机器9602022-09-27
  • C#C#实现判断一个时间点是否位于给定时间区间的方法

    C#实现判断一个时间点是否位于给定时间区间的方法

    这篇文章主要介绍了C#实现判断一个时间点是否位于给定时间区间的方法,涉及C#针对时间的转换与判定相关技巧,需要的朋友可以参考下...

    北风其凉6352021-10-19