Log4Net configuration and usage
<ConfigSections>
<Section name = "log4net" type = "System. Configuration. IgnoreSectionHandler"/>
<! -- <Section name = "log4net" type = "log4net. Config. Log4NetConfigurationSectionHandler, log4net"/> -->
</ConfigSections>
<Log4net>
<! -- Define output to file -->
<! -- Error -->
<Appender name = "RollingErrorLogFileAppender" type = "log4net. Appender. RollingFileAppender">
<! -- Define the file storage location -->
<File value = "Mylog \ ERROR \"/>
<AppendToFile value = "true"/>
<RollingStyle value = "Date"/>
<DatePattern value = "yyyy \ yyyyMM \ yyyyMMdd'.txt '"/>
<StaticLogFileName value = "false"/>
<Param name = "MaxSizeRollBackups" value = "1000"/>
<Layout type = "log4net. Layout. PatternLayout">
<! -- Output format -->
<ConversionPattern value = "% newline % n record time: % date % n thread ID: [% thread] % n log level: %-5 level % n error class: % logger property: [% property {NDC}]-% n error Description: % message % newline "/>
</Layout>
<Filter type = "log4net. Filter. LevelRangeFilter">
<! -- Filter logs and only record ERROR to FATAL -->
<LevelMin value = "ERROR"/>
<LevelMax value = "ERROR"/>
</Filter>
</Appender>
<! -- FATAL -->
<Appender name = "RollingFATALLogFileAppender" type = "log4net. Appender. RollingFileAppender">
<! -- Define the file storage location -->
<File value = "Mylog \ FATAL \"/>
<AppendToFile value = "true"/>
<RollingStyle value = "Date"/>
<DatePattern value = "yyyy \ yyyyMM \ yyyyMMdd'.txt '"/>
<StaticLogFileName value = "false"/>
<Param name = "MaxSizeRollBackups" value = "1000"/>
<Layout type = "log4net. Layout. PatternLayout">
<! -- Output format -->
<ConversionPattern value = "% newline % n record time: % date % n thread ID: [% thread] % n log level: %-5 level % n error class: % logger property: [% property {NDC}]-% n error Description: % message % newline "/>
</Layout>
<Filter type = "log4net. Filter. LevelRangeFilter">
<! -- Filter logs and only record ERROR to FATAL -->
<LevelMin value = "FATAL"/>
<LevelMax value = "FATAL"/>
</Filter>
</Appender>
<! -- Define output to database -->
<! --
SQL statement used to create a table in SQL Server
Create table [dbo]. [Log] (
[Id] [int] IDENTITY (1, 1) not null,
[Date] [datetime] not null,
[Thread] [varchar] (255) not null,
[Level] [varchar] (50) not null,
[Logger] [varchar] (255) not null,
[Message] [varchar] (4000) not null,
[Exception] [varchar] (2000) NULL
);
-->
<Appender name = "AdoNetAppenderErrorSQLServer" type = "log4net. Appender. AdoNetAppender">
<BufferSize value = "1"/>
<ConnectionType value = "System. Data. SqlClient. SqlConnection, System. Data, Version = 1.0.3300.0, Culture = neutral, PublicKeyToken = b77a5c561934e089"/>
<ConnectionString value = "server = LONGPENG; uid = sa; pwd = 0129; database = LogDB;"/>
<CommandText value = "insert into LogError ([Date], [Thread], [Level], [Logger], [Message], [Exception]) VALUES (@ log_date, @ thread, @ log_level, @ logger, @ message, @ exception) "/>
<Parameter>
<ParameterName value = "@ log_date"/>
<DbType value = "DateTime"/>
<Layout type = "log4net. Layout. RawTimeStampLayout"/>
</Parameter>
<Parameter>
<ParameterName value = "@ thread"/>
<DbType value = "String"/>
<Size value = "255"/>
<Layout type = "log4net. Layout. PatternLayout">
<ConversionPattern value = "% thread"/>
</Layout>
</Parameter>
<Parameter>
<ParameterName value = "@ log_level"/>
<DbType value = "String"/>
<Size value = "50"/>
<Layout type = "log4net. Layout. PatternLayout">
<ConversionPattern value = "% level"/>
</Layout>
</Parameter>
<Parameter>
<ParameterName value = "@ logger"/>
<DbType value = "String"/>
<Size value = "255"/>
<Layout type = "log4net. Layout. PatternLayout">
<ConversionPattern value = "% logger"/>
</Layout>
</Parameter>
<Parameter>
<ParameterName value = "@ message"/>
<DbType value = "String"/>
<Size value = "4000"/>
<Layout type = "log4net. Layout. PatternLayout">
<ConversionPattern value = "% message"/>
</Layout>
</Parameter>
<Parameter>
<ParameterName value = "@ exception"/>
<DbType value = "String"/>
<Size value = "2000"/>
<Layout type = "log4net. Layout. ExceptionLayout"/>
</Parameter>
</Appender>
<Root>
<Level value = "ALL"/>
<! -- Log recorded as a file -->
<Appender-ref = "RollingErrorLogFileAppender"/>
<Appender-ref = "RollingFATALLogFileAppender"/>
<! -- Record logs in the database format -->
<Appender-ref = "AdoNetAppenderErrorSQLServer"/>
</Root>
</Log4net>
================================== Another configuration ==================================
<Log4net>
<Root>
<Level value = "ALL"/>
<Appender-ref = "SysAppender"/>
<Appender-ref = "consoleApp"/>
</Root>
<! -- <Logger name = "WebLogger">
<Level value = "DEBUG"/>
</Logger> -->
<Appender name = "SysAppender" type = "log4net. Appender. RollingFileAppender, log4net">
<! -- <Param name = "File" value = "E: \ COLDDEMO \ project \ practice \ Solution201708 \ logs \"/> -->
<Param name = "File" value = "... \ .. \ MyLog \ AT \ ERROR \"/>
<! -- <Param name = "File" value = "C: \ TestWeb \ Debug \ Error \"/> -->
<Param name = "AppendToFile" value = "true"/>
<Param name = "RollingStyle" value = "Date"/>
<Param name = "DatePattern" value = """yyyyMMdd".txt & quot;"/>
<Param name = "StaticLogFileName" value = "false"/>
<Layout type = "log4net. Layout. PatternLayout, log4net">
<Param name = "ConversionPattern" value = "% d [% t] %-5 p % c-% m % n"/>
<Param name = "Header" value = "------------------------------------------------ & # xD; & # xA;"/>
<Param name = "Footer" value = "---------------------- footer -------------------------- & # xD; & # xA;"/>
</Layout>
<Filter type = "log4net. Filter. LevelRangeFilter">
<! -- Filter logs and only record ERROR to FATAL -->
<LevelMin value = "ERROR"/>
<LevelMax value = "ERROR"/>
</Filter>
</Appender>
<! --.. \ .. \ MyLog \ AT \ -->
<Appender name = "leleapp" type = "log4net. Appender. RollingFileAppender, log4net">
<! -- <Param name = "File" value = "E: \ COLDDEMO \ project \ practice \ Solution201708 \ logs \"/> -->
<Param name = "File" value = "... \ .. \ MyLog \ AT \ Warn \"/>
<! -- <Param name = "File" value = "C: \ TestWeb \ Debug \ Error \"/> -->
<Param name = "AppendToFile" value = "true"/>
<Param name = "RollingStyle" value = "Date"/>
<Param name = "DatePattern" value = """yyyyMMdd".txt & quot;"/>
<Param name = "StaticLogFileName" value = "false"/>
<Layout type = "log4net. Layout. PatternLayout, log4net">
<Param name = "ConversionPattern" value = "% d [% t] %-5 p % c-% m % n"/>
<Param name = "Header" value = "------------------------------------------------ & # xD; & # xA;"/>
<Param name = "Footer" value = "---------------------- footer -------------------------- & # xD; & # xA;"/>
</Layout>
<Filter type = "log4net. Filter. LevelRangeFilter">
<! -- Filter logs and record only Warn -->
<LevelMin value = "Warn"/>
<LevelMax value = "Warn"/>
</Filter>
</Appender>
</Log4net>
========================================================== ================================
Usage:
[Assembly: log4net. Config. XmlConfigurator (Watch = true)]
Namespace WebAppl
{
Public class LogHelper
{
/// <Summary>
/// Call Log4net to write logs
/// </Summary>
/// <Param name = "logContent"> log content </param>
/// <Param name = "log4Level"> record Log Level, enumeration </param>
Public static void WriteLog (string logContent, Log4NetLevel log4Level)
{
WriteLog (null, logContent, log4Level );
}
/// <Summary>
/// Call Log4net to write logs
/// </Summary>
/// <Param name = "type"> specifies the type of the error class in the log.
/// <Param name = "logContent"> log content </param>
/// <Param name = "log4Level"> record Log Level, enumeration </param>
Public static void WriteLog (Type type, string logContent, Log4NetLevel log4Level)
{
ILog log = type = null? LogManager. GetLogger (""): LogManager. GetLogger (type );
Switch (log4Level)
{
Case Log4NetLevel. Warn:
Log. Warn (logContent );
Break;
Case Log4NetLevel. Debug:
Log. Debug (logContent );
Break;
Case Log4NetLevel. Info:
Log. Info (logContent );
Break;
Case Log4NetLevel. Fatal:
Log. Fatal (logContent );
Break;
Case Log4NetLevel. Error:
Log. Error (logContent );
Break;
}
}
}
/// <Summary>
/// Log4net Log Level type Enumeration
/// </Summary>
Public enum Log4NetLevel
{
[Description ("warning")]
Warn = 1,
[Description ("debugging information")]
Debug = 2,
[Description ("general information")]
Info = 3,
[Description ("severe error")]
Fatal = 4,
[Description ("error log")]
Error = 5
}
}