1、

nuget install package log4net

2、站点跟目录新建配置文件 LogWriterConfig.xml

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-2.0"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root> <logger name="Idc.Logger" additivity="false">
<appender-ref ref="LogFileAppender" />
</logger> <!--Log File Setting-->
<appender name ="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value ="Log\Trace-"/>
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="" />
<param name="MaxFileSize" value="" />
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy.MM.dd'.log'" />
<param name="RollingStyle" value ="Date" /> <layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date{yyyy-MM-dd HH:mm:ss,fff} %-5p : %m%n"/>
</layout> <!--FATAL > ERROR > WARN > INFO > DEBUG-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
</configuration>

3、新建类

  public class LogWriter
{
private ILog _log4Net = null;
private const string DEFAULT_LOGGER_NAME = "Logger";
/// <summary>
/// Prevents a default instance of the <see cref="LogWriter"/> class from being created.
/// </summary>
/// <param name="log4NetInstance">The log4net instance to be used.</param>
private LogWriter(ILog log4NetInstance)
{
_log4Net = log4NetInstance;
} /// <summary>
/// Gets a logger with the specified configuration name.
/// </summary>
/// <param name="configName">Name of the logger in the configuration.</param>
/// <returns>The logger obtained.</returns>
/// <exception cref="System.Configuration.ConfigurationException">Thrown when no logger with the specified configuration name was found.</exception>
public static LogWriter GetLogger(string configName)
{
var logger = LogManager.GetLogger(configName);
if (logger == null)
{
throw new ArgumentException(string.Format("No logger configuration named '{0}' was found in the configuration.", configName), "configName");
}
return new LogWriter(logger);
} /// <summary>
/// Gets the default.
/// </summary>
public static LogWriter Default
{
get
{
return GetLogger(DEFAULT_LOGGER_NAME);
}
} /// <summary>
/// Writes an information level logging message.
/// </summary>
/// <param name="message">The message to be written.</param>
public void WriteInfo(object message)
{
_log4Net.Info(message);
} /// <summary>
/// Writes a warning level logging message.
/// </summary>
/// <param name="message">The message to be written.</param>
public void WriteWarning(object message)
{
_log4Net.Warn(message);
} /// <summary>
/// Writes a warning level logging message.
/// </summary>
/// <param name="message">The message to be written.</param>
/// <param name="exception">The exception.</param>
public void WriteWarning(object message, System.Exception exception)
{
_log4Net.Warn(message, exception);
} /// <summary>
/// Writes the error.
/// </summary>
/// <param name="message">The message to be written.</param>
public void WriteError(object message)
{
_log4Net.Error(message);
} /// <summary>
/// Writes the error level logging message..
/// </summary>
/// <param name="message">The message to be written.</param>
/// <param name="exception">The exception.</param>
public void WriteError(object message, System.Exception exception)
{
_log4Net.Error(message, exception);
} /// <summary>
/// Writes the fatal error level logging message..
/// </summary>
/// <param name="message">The message to be written.</param>
public void WriteFatal(object message)
{
_log4Net.Fatal(message);
} /// <summary>
/// Writes the fatal error level logging message..
/// </summary>
/// <param name="message">The message to be written.</param>
/// <param name="exception">The exception.</param>
public void WriteFatal(object message, System.Exception exception)
{
_log4Net.Fatal(message, exception);
} public void DeleteLog()
{
string logDirPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Log");
if (!Directory.Exists(logDirPath)) return;
int days =;
foreach (string filePath in Directory.GetFiles(logDirPath))
{
DateTime dt;
DateTime.TryParse(Path.GetFileNameWithoutExtension(filePath).Replace(@"Log\", "").Replace(".", "-"), out dt);
if (dt.AddDays(days).CompareTo(DateTime.Now) < )
{
File.Delete(filePath);
}
}
}
}

4、在Global.asax 文件cs 里面加入代码

 protected void Application_Start () {
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
WeixinConfig.Register();
log4net.Config.XmlConfigurator.Configure(new FileInfo("LogWriterConfig.xml"));
LogWriter.Default.WriteWarning("app started.");
} protected void Application_End () {
LogWriter.Default.WriteWarning("app stopped.");
}
protected void Application_Error (object sender, EventArgs e) {
Exception ex = Server.GetLastError().GetBaseException();
StringBuilder str = new StringBuilder();
str.Append("\r\n.客户信息:");
string ip = "";
if (Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR") != null) {
ip = Request.ServerVariables.Get("HTTP_X_FORWARDED_FOR").ToString().Trim();
} else {
ip = Request.ServerVariables.Get("Remote_Addr").ToString().Trim();
}
str.Append("\r\n\tIp:" + ip);
str.Append("\r\n\t浏览器:" + Request.Browser.Browser.ToString());
str.Append("\r\n\t浏览器版本:" + Request.Browser.MajorVersion.ToString());
str.Append("\r\n\t操作系统:" + Request.Browser.Platform.ToString());
str.Append("\r\n.错误信息:");
str.Append("\r\n\t页面:" + Request.Url.ToString());
str.Append("\r\n\t错误信息:" + ex.Message);
str.Append("\r\n\t错误源:" + ex.Source);
str.Append("\r\n\t异常方法:" + ex.TargetSite);
str.Append("\r\n\t堆栈信息:" + ex.StackTrace);
str.Append("\r\n--------------------------------------------------------------------------------------------------");
//创建路径
LogWriter.Default.WriteError(str.ToString());
}

5、项目 AssemblyInfo.cs 文件加入

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "LogWriterConfig.xml", Watch = true)]

6、大功告成可以在开发使用了

log4net 写日志配置的更多相关文章

  1. 验证码在后台的编写,并实现点击验证码图片时时发生更新 C# 项目发布到IIS后不能用log4net写日志

    验证码在后台的编写,并实现点击验证码图片时时发生更新   验证码在软件中的地位越来越重要,有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试:下面就是实现验证码的基本步骤: ...

  2. C# 项目发布到IIS后不能用log4net写日志

    在代码中正确配置了log4net后,IIS上仍然不能写日志的情况下,只需在写日志的目录添加 IIS_IUSRS 用户,并赋与读写权限即可.

  3. log4net 写日志

    转载地址:https://www.cnblogs.com/vichin/p/6022612.html   //基本使用 https://www.cnblogs.com/genesis/p/498562 ...

  4. 通过代码来调用log4net写日志

    1.使用如下配置 http://www.cnblogs.com/chucklu/p/5404813.html 2.调用 string ConfigFile; private void LoadLogC ...

  5. 怎么在.NetCore3.0 中使用Log4net 写日志 及读取配置文件的信息

    1:安装Log4Net的 NuGet 包: 我们通常之需要安装这一个包即可,其他的主包会自动被添加进来: insatll-package  Microsoft.Extensions.Logging.L ...

  6. log4net写日志的时间附带时区信息

    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss.fffzzz} [%thread] %-5level %logger - %me ...

  7. .Net Core 实践 - 使用log4net记录日志(3)— log4net向ElasticSearch写日志

    demo地址:https://github.com/PuzzledAlien/log4net_demo/tree/master/DotNetCoreConsole_V3 Windows 10 安装部署 ...

  8. log4net独立配置文件配置(winfrom)

    log4net配置很多,具体配置步骤不细说,具体说出个人遇到的问题. 在winfrom和web应用程序中配置,在默认配置文件配置都没问题,因为EF也写在默认配置文件中,就会冲突解决办法就是将log4. ...

  9. Log4Net 的简要配置

    引用log4net.dll AssemblyInfo.cs中 [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyF ...

随机推荐

  1. PID控制算法的C语言实现八 变积分的PID控制算法C语言实现

    变积分PID可以看成是积分分离的PID算法的更一般的形式.在普通的PID控制算法中,由于积分系数ki是常数,所以在整个控制过程中,积分增量是不变的.但是,系统对于积分项的要求是,系统偏差大时,积分作用 ...

  2. CSS文字溢出部分自动用"..."代替

    CSS文字溢出部分自动用"..."代替 如html部分: <h4><马尔代夫双鱼岛Olhuveli4 晚6 日自助游></h4> <p&g ...

  3. OpenCV---分水岭算法

    推文: OpenCV学习(7) 分水岭算法(1)(原理简介简单明了) OpenCV-Python教程:31.分水岭算法对图像进行分割(步骤讲解不错) 使用分水岭算法进行图像分割 (一)获取灰度图像,二 ...

  4. 为VSCODE添加右键菜单

    参考:https://blog.csdn.net/GreekMrzzJ/article/details/82194913 1.创建一个名为vscode.reg的空文本文件,填入下列内容 Windows ...

  5. centos7下安装mysql5.7.24

    第一步:下载rpm包 sudo wget http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-rel ...

  6. JSTL获取当日时间与数据时间比较

    <jsp:useBean id="now" class="java.util.Date" /> <fmt:formatDate value=& ...

  7. Linux centos7下设置Tomcat开机自启动

    1,centos7 使用 systemctl 替换了 service命令 参考:redhat文档: https://access.redhat.com/documentation/en-US/Red_ ...

  8. BZOJ2588:LCA+主席树来实现树上两点之间第K大点权查询

    对于每个节点维护这个节点到根的权值线段树 对于每个询问(x,y),这条路径上的线段树 tree[x]+tree[y]-tree[lca(x,y)]-tree[fa[lca(x,y)]] #includ ...

  9. CS46 C 枚举二分

    给你n*2个数其中n个数是原数减去了X值的数.问你满足条件的X值和原来的n个数.注意X为正整数. X should be positive,没0的 思路很简单,一个数必定会对应一个数,那么枚举一个数和 ...

  10. SQL语句(二十二)—— 权限授予和回收(作业练习)

    CREATE TABLE course ( Cno ) NOT NULL, Cname ) DEFAULT NULL, Cpno ) DEFAULT NULL, Ccredit smallint DE ...