log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
1、升级到log4net的最新版
PM下执行
Install-Package log4net
还是无法解决的,使用下面的方法
2、使用Nlog替换之,详见https://github.com/NLog/NLog/wiki/Tutorial
安装
Install-Package NLog.Config
NLog使用方法比log4net更为简单,配置文件如下,如果成windows程序需将NLog.config自动复制到bin下面
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log"> <!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/> <!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets> <!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
--> <!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
<target name="console" xsi:type="ColoredConsole" />
</targets> <rules>
<!-- add your logging rules here --> <!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" />
</rules>
</nlog>
NLog.config
调用代码:
Logger logger = LogManager.GetCurrentClassLogger();
logger.Trace("Sample trace message");
logger.Debug("Sample debug message");
logger.Info("Sample informational message");
logger.Warn("Sample warning message");
logger.Error("Sample error message");
logger.Fatal("Sample fatal error message");
logger.Info("wilson测试 日志日期:{0}", DateTime.Now);
执行结果,非常漂亮的控制台输出:

web站点配置log写入到sql server数据库,需要安装NLog.Web
Install-Package NLog.Web
配置文件如下
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log"> <!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue"/> <!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets> <!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
--> <!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
<target name="console" xsi:type="ColoredConsole" /> <target name="db"
xsi:type="Database"
connectionStringName="NLogConn"
commandType="StoredProcedure"
commandText="[dbo].[NLog_AddEntry_p]"
>
<parameter name="@machineName" layout="${machinename}" />
<parameter name="@siteName" layout="${iis-site-name}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@username" layout="${aspnet-user-identity}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@properties" layout="${all-event-properties:separator=|}" />
<parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
<parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
<parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
<parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />
<parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
<parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
<parameter name="@callSite" layout="${callsite}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target> </targets> <rules>
<!-- add your logging rules here --> <!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Debug" writeTo="logfile" />
<logger name="*" minlevel="Info" writeTo="console" /> <logger name="*" minlevel="Debug" writeTo="db" />
</rules>
</nlog>
Web NLog配置
Web.Config要加上对应数据库连接
<?xml version="1.0" encoding="utf-8"?> <!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration>
<connectionStrings>
<add name="NLogConn" connectionString="Server=.;uid=sa;pwd=sa;Database=db;"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web> </configuration>
保存数据库结果:

写入oracle的配置,使用System.Data.OracleClient,.net 4.0以上已经抛弃
<targets>
<target name="oraclelog" type="Database"> <dbProvider>System.Data.OracleClient.OracleConnection,System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</dbProvider> <connectionString>Data Source=JMDB_215;User ID=TYUM_UM; Password=DEV_TYUM_UM;</connectionString> <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText> <parameter name=":log_user" layout="${aspnet-user-identity}"/>
<parameter name=":log_level" layout="${level}"/>
<parameter name=":log_date" layout="${date}"/>
<parameter name=":log_message" layout="${message}"/> </target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="oraclelog" />
</rules>
写入oracle的配置,使用Oracle.DataAccess.Client,配置文件如下:
<targets>
<target name="oraclelog" type="Database"> <!--<dbProvider>Oracle.ManagedDataAccess.Client,Oracle.ManagedDataAccess</dbProvider>-->
<dbProvider>Oracle.DataAccess.Client.OracleConnection,Oracle.DataAccess</dbProvider>
<connectionString>Data Source=orcl;User ID=oracle_user; Password=password;</connectionString> <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText> <parameter name=":log_user" layout="${machinename}"/>
<parameter name=":log_level" layout="${level}"/>
<parameter name=":log_date" layout="${date}"/>
<parameter name=":log_message" layout="${message}"/> </target>
</targets> <rules>
<logger name="oracleDbLog" minlevel="Debug" writeTo="oraclelog" />
</rules>
Oracle.DataAccess.Client Log配置
C#调用代码:
Logger oracleLogger = LogManager.GetLogger("oracleDbLog");
oracleLogger.Error(new Exception("自定义异常oracle"), "错误信息 oracledb", string.Empty);
执行结果:

写入Mysql,需应用MySql.Data程序集,安装Install-Package MySql.Data -Version 6.9.9,配置文件如下:
<targets>
<target name="MySQLLog" type="Database">
<dbProvider>MySql.Data.MySqlClient.MySqlConnection,MySql.Data</dbProvider>
<connectionString>Server=192.168.0.2;Uid=root;Pwd=root;Database=mydb;</connectionString> <commandText>insert into t_nlog (log_user,log_level,log_date,log_message) values(@log_user,@log_level,@log_date,@log_message)</commandText> <parameter name="@log_user" layout="${machinename}"/>
<parameter name="@log_level" layout="${level}"/>
<parameter name="@log_date" layout="${date}"/>
<parameter name="@log_message" layout="${message}"/>
</target>
</targets> <rules>
<logger name="*" minlevel="Debug" writeTo="MySQLLog" />
</rules>
NLog Mysql
执行结果:

文件日志异常模板:
<target name="logfile" xsi:type="File" fileName="${basedir}/nlogs/${shortdate}.log" layout="${longdate}|${level}||${logger} ${message}| ${exception:format=tostring}" />
NLog日志写入到MongoDB,安装NLog.Mongo
PM> Install-Package NLog.Mongo
配置文件:
<extensions>
<add assembly="NLog.Mongo"/>
</extensions> <target xsi:type="Mongo"
name="mongoDefault"
connectionString="mongodb://192.168.0.226:6111/NLogging"
collectionName="DefaultLog"
cappedCollectionSize="26214400">
<property name="ThreadID" layout="${threadid}" bsonType="Int32" />
<property name="ThreadName" layout="${threadname}" />
<property name="ProcessID" layout="${processid}" bsonType="Int32" />
<property name="ProcessName" layout="${processname:fullName=true}" />
<property name="UserName" layout="${windows-identity}" />
</target> <rules> <logger name="*" level="Debug" writeTo="mongoDefault" />
</rules>
NLog.config
执行结果如下:

参考:https://github.com/loresoft/NLog.Mongo
log4net 发布到生产环境不写日志的解决方法--使用 NLog日志的更多相关文章
- [转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
本文转自:http://www.cnblogs.com/weiweictgu/p/5848805.html 1.升级到log4net的最新版 PM下执行 Install-Package log4net ...
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
asp.net程序编写完成后,发布到IIS,经常出现的一个问题是连接不上Oracle数据库,具体表现为Oracle的本地NET服务配置成功:用 pl/sql 等工具也可以连接上数据库,但是通过浏览器中 ...
- 多测师讲解自动化测试_rf运行无日志(解决方法)_高级讲肖sir
rf运行无日志(解决方法) 出现现象: 方法: 1.先在套件里面导入OperatingSystem库 2.在套件中新建一个关键字套件点击右键选择new user keyword关键 字的名称为:kil ...
- 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境
一.环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新 ...
- ORA-00257归档日志写满的解决方法
背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我成功设定数据库为归档模式以后, 第二天再次尝试连接数据库,报错:ORA-00257.在网上找到了一圈资 ...
- (转)ORA-00257归档日志写满的解决方法
转自:http://www.cnblogs.com/xwdreamer/p/3804509.html 背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我 ...
- Vue 生产环境(production) 打开 调试工具的方法
总所周知,在production生产环境下,点击vue插件会显示, 并且按F12是没办法使用调试工具的,这样非常不方便 其实是有一个办法的,那就是复制下面的js,然后在控制台执行 代码中已经写清楚执行 ...
- oracle归档日志写满错误解决方法
最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...
- 修改vue的配置项支持生产环境下二级目录访问的方法
本文主要记录如何配置vue的打包文件配置项,使打包后的文件可以支持二级目录的访问. 1.常规打包 在实际的项目中,我们通常都使用 npm run build 直接打包文件后丢到服务器上访问 打包后的文 ...
随机推荐
- sql2008 无法附加数据库
sql2008 因为数据库正在使用,所以无法获得对数据库的独占访问权---还原或删除数据库的解决方法 数据库还原出现 3154错误 --主备份 --RESTORE DATABASE [NET_CN] ...
- MATLAB 物体识别算法说明:vision.ForegroundDetector, vision.BlobAnalysis
在官方示例中,Motion-Based Multiple Object Tracking和Using Kalman Filter for Object Tracking都使用了下面两个算法进行物体的识 ...
- datawindow 创建操作报表。
最近制作做了几个简单的报表,写下主要的代码.以便各位参考. public void FillDW(DataTable dtbResult) { try { DataRow dtFr; ; , j = ...
- HDU 1538
http://acm.hdu.edu.cn/showproblem.php?pid=1538 经典经济学问题,海盗分金 分析http://www.guokr.com/article/41423/ #i ...
- java中时间类型的问题
时间类型:System.currentTimeMillis() 获得的是自1970-1-01 00:00:00.000 到当前时刻的时间距离,类型为longimport java.sql.Date d ...
- [翻译]利用REDIS来搭建可靠分布式锁的提议
本系列都是翻译REDIS作者的博文 另外加上我自己的一点点理解 希望有问题大家一起讨论 http://antirez.com/news/77 原文地址 在利用REDIS做分布式锁时基本持有2种观点 ...
- java.util.NoSuchElementException解决办法
报错代码 public void switchToNewWindow(){ //得到当前句柄 String currentWindow = driver.getWindowHandle(); //得到 ...
- Jena对描述逻辑构造的支持
前言 本文依据"The Description Logic Handbookd"中Appendxi1 Description Terminology中基本的描述逻辑构造,考察Jen ...
- 《JavaScript面向对象编程指南》译者序
相对于Perl.Python等动态脚本语言来说,JavaScript确实是一门饱受误解的语言.对于译者这种从20世纪90年代末走过来的C++程序员来说,尤其如此.在那个年代,提起JavaScript总 ...
- Qt 手动添加ui文件到工程(转)
制作ui文件 先应该用Qt Designer绘制一个自己的界面,并存为myform.ui(这里的myform可以用自己喜欢的名字代替).在制作自己的界面文件时要注意以下几个要点: 1.要记住ui文件的 ...