惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Vulnerabilities – Threatpost
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
V
Visual Studio Blog
L
Lohrmann on Cybersecurity
Latest news
Latest news
S
Securelist
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
Webroot Blog
Webroot Blog
The Cloudflare Blog
S
Secure Thoughts
Y
Y Combinator Blog
aimingoo的专栏
aimingoo的专栏
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
S
Security Affairs
Attack and Defense Labs
Attack and Defense Labs
Microsoft Azure Blog
Microsoft Azure Blog
T
Tailwind CSS Blog
V2EX - 技术
V2EX - 技术
GbyAI
GbyAI
L
LINUX DO - 热门话题
PCI Perspectives
PCI Perspectives
Schneier on Security
Schneier on Security
V
V2EX
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
T
Threatpost
WordPress大学
WordPress大学
SecWiki News
SecWiki News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
A
Arctic Wolf
酷 壳 – CoolShell
酷 壳 – CoolShell
W
WeLiveSecurity
Jina AI
Jina AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - angushine

获得本机IP地址 设置eclipse文件默认的编码方式 Eclipse Helios的PermGen space错误的解决办法 取指定长度的字符串(双字节算2) - angushine - 博客园 截取指定长度字符串 Silverlight项目无法启动调试 增强 VSS 的文件共享安全性 兼容各个版本浏览器的设置最小宽度 动态分配一维数组 浏览器区别 C#获得调用方法的名称和类名 jQuery全选/全消CheckBox以及JS回调一例 MySQL绿色安装方法1 WebBrowser中调用加载页面的Javascript方法 定时更新内存和虚拟内存 多线程中更新组件 Request、Request.QueryString、Request.Form与Request.Params 反射调用静态方法 开始→运行→输入的命令集锦(转载)
封装log4net
angushine · 2009-10-29 · via 博客园 - angushine

封装一个log4net日志管理类

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Diagnostics;using log4net;
using log4net.Config;
using log4net.Appender;namespace Demo
{
    
/// <summary>
    
/// 日志管理类
    
/// </summary>
    public class Logger
    {
        
/// <summary>
        
/// Debug委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DDebug(object message);/// <summary>
        
/// Info委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DInfo(object message);/// <summary>
        
/// Warn委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DWarn(object message);/// <summary>
        
/// Error委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DError(object message);/// <summary>
        
/// Fatal委托
        
/// </summary>
        
/// <param name="message">日志信息</param>
        public delegate void DFatal(object message);/// <summary>
        
/// Debug
        
/// </summary>
        public static DDebug Debug
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Debug; }
        }
/// <summary>
        
/// Info
        
/// </summary>
        public static DInfo Info
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Info; }
        }
/// <summary>
        
/// Warn
        
/// </summary>
        public static DWarn Warn
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Warn; }
        }
/// <summary>
        
/// Error
        
/// </summary>
        public static DError Error
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Error; }
        }
/// <summary>
        
/// Fatal
        
/// </summary>
        public static DFatal Fatal
        {
            
get { return LogManager.GetLogger((new StackTrace()).GetFrame(1).GetMethod().DeclaringType).Fatal; }
        }
/// <summary>
        
/// 静态构造函数
        
/// </summary>
        static Logger()
        {
            
string path = string.Format("{0}log4net.config", AppDomain.CurrentDomain.BaseDirectory);
            
if (File.Exists(path))
            {
                log4net.Config.XmlConfigurator.Configure(
new FileInfo(path));
            }
            
else
            {
                RollingFileAppender appender 
= new RollingFileAppender();
                appender.Name 
= "root";
                appender.File 
= "log.txt";
                appender.AppendToFile 
= true;
                appender.RollingStyle 
= RollingFileAppender.RollingMode.Composite;
                appender.DatePattern 
= "yyyyMMdd-HHmm\".txt\"";
                appender.MaximumFileSize 
= "1MB";
                appender.MaxSizeRollBackups 
= 10;
                log4net.Layout.PatternLayout layout 
= new log4net.Layout.PatternLayout("%d{yyyy-MM-dd HH:mm:ss,fff}[%t] %-5p [%c] : %m%n");
                appender.Layout 
= layout;
                BasicConfigurator.Configure(appender);
                appender.ActivateOptions();
            }
        }
    }
}

log4net.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<!--type属性的完整格式为:配置节处理器类名,程序集名称,Version=程序集版本号,Culture=区域信息,PublicKeyToken=公钥-->
    
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  
</configSections>
  
<log4net>
    
<!--所有logger的基,root的设置在所有logger中都起作用。 
    当在root和logger中重复设定相同的appender时,你会发现同一日志信息将被记录两次。
-->
    
<root>
      
<level value="ALL" />
      
<appender-ref ref="LogFileAppender" />
      
<appender-ref ref="ConsoleAppender" />
    
</root>
    
<!--日志记录器logger,可以有多个-->
    
<logger name="AppLogger">
      
<level value="INFO" />
      
<appender-ref ref="LogFileAppender" />
      
<appender-ref ref="ConsoleAppender" />
    
</logger>
    
<logger name="Form1">
      
<level value="DEBUG" />
      
<appender-ref ref="LogFileAppender" />
    
</logger>
    
<!--一个appender可以由多个logger共用,当然一个logger可以指定多个appender。-->
    
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      
<param name="File" value="App.log" />
      
<param name="AppendToFile" value="true" />
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,fff}[%t] %-5p [%c] - %m%n" />
      
</layout>
      
<filter type="log4net.Filter.LevelRangeFilter">
        
<param name="LevelMin" value="DEBUG" />
        
<param name="LevelMax" value="FATAL" />
      
</filter>
    
</appender>
    
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      
</layout>
    
</appender>
  
</log4net>
</configuration>