这里的Cloud包含Worker Role和Web Role,Role是运行在云主机中的,这里的主机和VM有所不同,Windows Azure Role Architecture。我们并没有和本地服务器一样的权限;且在Role中,除了我们的应用,其他任何数据都是非持久化的。所以在Azure中使用Log4Net需要解决两个问题,分别是写的权限和日志持久化。

第一个问题我采用的是Role的本地存储,即在Role运行的VM中,开辟一块空间,供Log4Net使用,这里没有任何权限问题。

首先在Azure项目配置文件(csdef)中配置本地存储的名称和容量:

<LocalResources>
<LocalStorage name="Log4Net" cleanOnRoleRecycle="false" sizeInMB="2048" />
<LocalStorage name="CrashLogs" cleanOnRoleRecycle="false" sizeInMB="2048" />
</LocalResources>

其次在Log4Net文件中修改Appender,这里我们需要对Log4Net进行一些扩展,创建一个名为AzureAppender的自定义Appender。

<!-- "debug" log file appender -->
<appender name="DebugFileAppender" type="Utility.Extension.AzureAppender, IDFSoft.Utility">
<encoding value="utf-8" />
<param name="File" value="C:\PA\logs\"/>
<param name="StaticLogFileName" value="false" />
<param name="DatePattern" value="yyyy-MM-dd_'Game_Debug.log'" />
<param name="RollingStyle" value="Date" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="1" />
<param name="MaximumFileSize" value="250MB" />
<param name="LockingModel" type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="DEBUG" />
</filter>
</appender>

AzureAppender只需要覆盖父类的File字段即可,在当前应用运行在Azure环境中时,修改日志文件路径为本地存储,so easy。

public class AzureAppender : RollingFileAppender
{
public override string File
{
set
{
try
{
if (RoleEnvironment.IsAvailable || RoleEnvironment.IsEmulated)
{
base.File = RoleEnvironment.GetLocalResource("Log4Net").RootPath + @"\" + new FileInfo(value).Name;
}
else
{
base.File = value;
}
}
catch
{
base.File = Path.Combine("Log4Net", new FileInfo(value).Name);
}
}
}
}

再来看看第二个问题,就更简单了,Role启动时,设置需要同步的本地存储和同步的目标即可。

public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
var diagnosticsConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();
diagnosticsConfig.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes();
diagnosticsConfig.Directories.DataSources.Add(
new DirectoryConfiguration
{
Path = RoleEnvironment.GetLocalResource("Log4Net").RootPath,
Container = "log4net",
DirectoryQuotaInMB =
}
);
string crashLogPath = RoleEnvironment.GetLocalResource("CrashLogs").RootPath;
CrashDumps.EnableCollectionToDirectory(crashLogPath, true);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagnosticsConfig);
return base.OnStart();
}
}

至此,终于在Azure Storage中看到了久违的日志。

Azure Cloud中的Log4Net设置的更多相关文章

  1. 在Azure Cloud Service中部署Java Web App(1)

    Microsoft Azure是一个开放的,灵活的云平台,除了对自家的.Net平台有良好的支持外,对于各种开源的软件,语言,工具,框架都有着良好的支持,比如Java,Php,Python等等,你可以使 ...

  2. 在Azure Cloud Service中部署Java Web App(2)

    接上文. 9.在进行发布之前,需要对我们的订阅做一些设置,因为默认情况下,Azure的service end指向的是Azure global的站点,如果我们要将服务发布在Azure的中国站点,需要做下 ...

  3. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)

    问题描述 把Web Role服务发布到Azure Cloud Service后,需要在IIS的输出日志中,把每一个请求的HTTP Request Header中的User-Agent内容也输出到日志中 ...

  4. Spring Cloud中Feign如何统一设置验证token

    代码地址:https://github.com/hbbliyong/springcloud.git 原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过 ...

  5. 【Azure 云服务】如何从Azure Cloud Service中获取项目的部署文件

    问题描述 在历史已经部署的云服务(Azure Cloud Service)中,如何获取到项目在很久以前的部署包文件呢? 解决办法 1)如果部署云服务是通过门户上传部署包到存储账号中,则可以直接从存储账 ...

  6. Windows Azure Cloud Service (11) PaaS之Web Role, Worker Role(上)

    <Windows Azure Platform 系列文章目录> 本文是对Windows Azure Platform (六) Windows Azure应用程序运行环境内容的补充. 我们知 ...

  7. [SDK2.2]Windows Azure Cloud Service (35) 使用VS2013发布Azure Cloud Service

    <Windows Azure Platform 系列文章目录> 好久没有更新BLOG了,今天我们继续Windows Azure相关的内容. 笔者最近把Visual Studio升级到了20 ...

  8. Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书

    <Windows Azure Platform 系列文章目录> 在某些时候,我们需要在Azure PaaS Cloud Service配置HTTPS连接.本章将介绍如何在本地创建证书,然后 ...

  9. Windows Azure Cloud Service (38) 微软IaaS与PaaS比较

    <Windows Azure Platform 系列文章目录> 最近一直想总结Azure IaaS和PaaS的区别与比较,写个博文详细说明一下.建议读者在阅读之前,先熟悉微软PaaS和Ia ...

随机推荐

  1. hihoCoder 1043 完全背包 (dp)

    http://hihocoder.com/problemset/problem/1043 动态转移方程 :for v=cost..V f[v]=max(f[v],f[v-c[i]]+w[i]); #i ...

  2. spring.net异常处理

    接下来我们看一下SpringNetAop层的内容:此层主要是实现一些AOP的代码,以及特性和一个统一调用spring.net的类:记录日志我们使用Log4Net来实现: 1:Aspects 文件夹里存 ...

  3. win7下搭建opengles2.0编程环境

    原帖地址:http://sixgod.org/archives/72   1.下载AMD的OpenGL ES2.0的模拟器,地址: http://www.opengles-book.com/ESEmu ...

  4. Mac下配置idk

    Mac下配置java #以下进入啰嗦模式演示添加jdk7 #下载jdk7的mac版 #官网下载地址http://www.oracle.com/technetwork/java/javase/downl ...

  5. 解决iis出现这个问题-2147467259 (0x80004005)

    在运行中运行下面命令就可解决问题 regsvr32 vbscript.dllregsvr32 jscript.dllregsvr32 %windir%\system32\inetsrv\asp.dll

  6. Volley : "参数param:{ inoutNo:inoutNo ,whcode:’’}

    private void fuzzySearch() { mRequestQueue = Volley.newRequestQueue(getActivity()); String str = Sha ...

  7. I.MX6 ov5640 camera

    /************************************************************************ * I.MX6 ov5640 camera * 说明 ...

  8. clearfix 清除浮动的问题

    今天看一篇博文,发现其实有很多方法实现清除浮动,各有利弊 采用伪类:after进行后续空制的高度位零的伪类层清除 采用CSS overflow:auto的方式撑高 采用CSS overflow:hid ...

  9. .htaccess 文件的使用

    用于服务器对文件夹的控制 官方解释为 :分布式配置文件 ,提供了针对目录改变配置的方法; 项目可以有多个这样的配置文件,子目录文件会覆盖父目录的配置 在apache(这里泛指服务器)中,/conf/v ...

  10. 如何在VMware虚拟机间建立共享磁盘?

    在同一台电脑上,有时难免要安装多个虚拟机,存储空间就成了最大的问题,那么如何解决虚拟机的硬盘问题呢,Vmware自带的工具可以很好的解决此问题,下面我们就来看看如何在Vmware虚拟机间建立共享磁盘? ...