NLog in docker compose not giving file output - asp.net-core

I'm trying to set up logging for my application using NLog. The app is running in a docker service along with other services such as a database. I'm not sure if that creates any issues, but I doubt it as I set up internal logging and that works fine. I set up NLog to have two targets: a console target and a file target. The internal log tells me it loaded those two targets from my config I specified. Now, the weird thing is, I get console output, but no file gets created.
nlog.config
<?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"
autoReload="true"
internalLogLevel="info"
internalLogFile="logs/internal-nlog.txt">
<!-- enable asp.net core layout renderers -->
<extensions>
<add assembly="NLog.Web.AspNetCore"></add>
</extensions>
<!-- the targets to write to -->
<targets>
<!-- console log -->
<target name="consolelog" xsi:type="Console"></target>
<target name="logfile" xsi:type="File" fileName="logs/${shortdate}-n.txt" Layout="${longdate}|${level:uppercase=true}|${logger}|${message}"></target>
</targets>
<!-- rules to map from logger name to target -->
<rules>
<!-- log everything from application namespace to console -->
<logger name="vote_server.*" minlevel="Trace" writeTo="consolelog"></logger>
<!-- log everything from application namespace to file -->
<logger name="vote_server.*" minlevel="Trace" writeTo="logfile"></logger>
</rules>
</nlog>

Related

Identity works fine on localhost but having errors on server

I am using .Net Core MVC with built-in authorization for individual user accounts.
Registration and login works fine when I run it locally but when I uploaded it on Smarterasp and tried to register I got an error saying :
An error occurred while processing your request.
This is my publishing profile
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>website.com</SiteUrlToLaunchAfterPublish>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<TargetFramework>netcoreapp3.1</TargetFramework>
<ProjectGuid>501f4fbc-faa5-4f41-859b-177881cbb611</ProjectGuid>
<SelfContained>false</SelfContained>
<MSDeployServiceURL>https://website.com:8172/MsDeploy.axd?site=coinmaniabot-001-site1</MSDeployServiceURL>
<DeployIisAppPath>sitename</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>False</EnableMSDeployBackup>
<UserName>coinmaniabot-001</UserName>
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
<_SavePWD>False</_SavePWD>
</PropertyGroup>
</Project>

NLog always creates 1KB file, even when 'archiveAboveSize' value is set > than 1KB in .net core

NLog always creates 1KB file, even when 'archiveAboveSize' value is set > than 1KB
Following is my nlog.config file.
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="LayoutFooter" value="----------------------------------------"/>
<targets>
<target name="infoInstrumentation"
xsi:type="File"
concurrentWrites="false"
archiveFileName="D:\Logs\Instrumentation.${shortdate}.{##}.log"
archiveAboveSize="5"
archiveNumbering="Rolling"
maxArchiveFiles="10"
fileName="D:\Logs\Instrumentation.${shortdate}.log"
layout="Timestamp: ${date}${newline}${all-event-properties:format=[key]\: [value]:separator=\
}${newline}Message: ${message}${newline}Machine: ${machinename}${newline}${newline}${LayoutFooter}"
keepFileOpen="false">
</target>
<target name="errorInstrumentation"
xsi:type="File"
concurrentWrites="false"
archiveFileName="D:\Logs\Instrumentation.${shortdate}.{##}.log"
archiveAboveSize="5"
archiveNumbering="Rolling"
maxArchiveFiles="10"
fileName="D:\Logs\Instrumentation.${shortdate}.log"
layout="Timestamp: ${date}${newline}${all-event-properties:format=[key]\: [value]:separator=\
}${newline}Message: ${message}${newline}StackTrace: ${exception:format=toString}${newline}Machine: ${machinename}${newline}${newline}${LayoutFooter}"
keepFileOpen="false">
</target>
</targets>
<rules>
<logger name="ServiceLogger" level="Info" writeTo="infoInstrumentation"/>
<logger name="ServiceLogger" level="Error" writeTo="errorInstrumentation"/>
</rules>
</nlog>
When code runs, it just keeps on creating 1KB file, instead of creating file of size 5KB.
I am using following version of NLog in my .net core project:
"NLog.Extensions.Logging": "1.0.0-rtm-beta1"
This is a known issue. It seems that file-creation time doesn't always give correct values.
See https://github.com/NLog/NLog/issues/1633
NLog is working on a fix.

MSBuild Web Deploy not updating connection strings

I am currently trying to get my deployment process up and running on my production server. Currently I am using the web deploy and publish profiles to achieve this, and I have everything working correctly, apart from the updating of connection strings to suit the production server.
I am using:
msbuild myProj.csproj /p:DeployOnBuild=true;PublishProfile=myProfile;Configuration=Release
to create the publish package, and the:
call myProj.deploy.cmd /Y /M:http://myServer/MSDeployAgentService -allowUntrusted /U:user /:Password
So this is working, it packages and then sends it to the server fine, and configures IIS correctly, but points to the wrong database.
My publishing profile looks like:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<MSDeployServiceURL>http://myserver</MSDeployServiceURL>
<DeployIisAppPath>Website</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod>
<UserName>user</UserName>
<_SavePWD>True</_SavePWD>
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="DBContext" Order="1" Enabled="False">
<Destination Path="Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"" Name="" />
<Object Type="DbCodeFirst">
<Source Path="DBMigration" DbContext="myproj.Repositories.DBContext, myproj.Repositories" MigrationConfiguration="myproj.Repositories.Migrations.Configuration, myproj.Repositories" Origin="Configuration" />
</Object>
</ObjectGroup>
<ObjectGroup Name="DefaultConnection" Order="2" Enabled="False">
<Destination Path="Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"" Name="" />
<Object Type="DbDacFx">
<PreSource Path="Data Source=localhost;Initial Catalog=devDB;User ID=user;Password="password"" includeData="False" />
<Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
</Object>
<UpdateFrom Type="Web.Config">
<Source MatchValue="Data Source=localhost;Initial Catalog=devDB;User Id=user;Password=password" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
</UpdateFrom>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
</PropertyGroup>
<ItemGroup>
<MSDeployParameterValue Include="$(DeployParameterPrefix)DBContext-Web.config Connection String">
<ParameterValue> Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"</ParameterValue>
</MSDeployParameterValue>
<MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String">
<ParameterValue>Data Source=server;Initial Catalog=ProductionDB;User ID=user;Password="password"</ParameterValue>
</MSDeployParameterValue>
</ItemGroup>
</Project>
Annoyingly this works fine when Publishing directly from VS2012, just not via command line. Is there a switch or option I am missing from my msbuild call maybe?
It is not working correctly as in my myProj.SetParameters.xml file, the connection strings shown in there are wrong. If I manually change these to the correct connection strings, then the web.xml file is correct on the production server once deployed. How do I get the correct string into my SetParameters file? Any help would be greatly appreciated.
In the end to get around this, in Visual Studio I created a Parameters.xml file in the root of project which holds the values of the connection strings to be used on the production server. These are picked up and used instead of the default values.
The Parameters.xml file looks like:
<?xml version="1.0" encoding="utf-8" ?>
<parameters>
<parameter name="DefaultConnection-Web.config Connection String"
description=""
defaultValue=""tags="" />
Just add as many as you require and obviously populate the attributes as required
My DefaultConnection was not updating either. It turned out that I had to delete the MyProject > PublishProfiles .pubxml file.
Then when attempting to publish the newly built project it asked me to connect to azure and download the publishing profile.
Even though that wizard has a checkbox with the option to turn off overriding the DefaultConnection string with the one pulled down with the publishing profile, unchecking it had no effect. It continued to overwrite the string.
So in the azure control panel (portal) I clicked Websites > My Website > Configure
Scroll down to connection strings and you can show the hidden connection string. I just removed it by hitting the x and then hardcoded the correct one in my web config.
I then removed the .pubxml again and went through the wizard again. Now there is not connectionstring being pulled down with the publish profile.
My Publish Profile .pubxml file (found in Project\Properties\PublishProfiles) had become corrupt with extra duplicate "DefaultConnection-Web.config Connection String" nodes. The connection string updated correctly after I deleted the extra nodes.

Why is msbuild duplicating entries in web.config transformations?

I am using web.config transformations to insert entries into the web.config for certain build configurations.
E.g. my Web.Test.config has this entry:
<elmah>
<errorMail from="me#me.com" to="me#me.com" async="false" smtpPort="25" smtpServer="mail" subject="test.senegal.co.uk Exception" xdt:Transform="Insert" />
</elmah>
This works absolutely fine building from visual studio.
However when creating a deployment package using msbuild, the entry is duplicated in the web.config. This obviously causes an exception.
Any ideas?
UPDATE
My "master" config is Web.Master.config not Web.config. The web.config file gets overwritten on build in visual studio. I think it must have something to do with this.
What I think is happening is msbuild is transforming web.config rather than using the Web.Master.config.
The question is how to tell it to use the right master.
I added /p:TransformWebConfigEnabled=false to the msbuild parameters, as my web.config was already being transformed in a BeforeBuild target like so:
<Target Name="BeforeBuild">
<TransformXml Source="$(MSBuildProjectDirectory)\Web.Master.config" Transform="$(MSBuildProjectDirectory)\Web.$(Configuration).config" Destination="$(MSBuildProjectDirectory)\Web.config" />
</Target>
In my case duplication was caused by xdt:Transform="Insert". If remove it from Web..config and leave the rest it will work properly, e.g.:
<!-- doesn't work -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="My"
xdt:Transform="Insert" />
vs.
<!-- works -->
<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="My"
/>

CruiseControl.Net Web Dashboard not displaying results

Having problems displaying the results in CruiseControl.net web dashboard.
I've built a config file which kicks off a build of the project. It then runs nunit over my tests, they execute and finish just fine (I can open the log and see the results there). The ccnet logs show that the log files were successfully merged. However, try as I might, I can't get it to appear in the web dashboard. It just gives the frustrating:
BUILD FAILED
Project: GroundControlTests
Date of build: 2011-01-07 17:16:36
Running time: 00:00:58
Integration Request: mmayo triggered a build (ForceBuild) from PC0098
Projects built with no warnings at all :-)
Modifications since last build (0)
message, despite failing.
I suspect it has something to do with the xsl transforms, but have tried just about everything I can think of.
Certainly if I click View Build log, it shows, but the main report doesn't show passes and fails :(
My config files are below, any suggestions appreciated!
---nant.build---
<project name="GroundControl" default="cleanNunit" basedir=".">
<description>Cleanup tasks</description>
<target name="cleanNunit"
description="removes nunit log file">
<delete file="${CCNetArtifactDirectory}\nunit-results.xml"
failonerror="true" />
</target>
</project>
-----ccnet.config-------
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<project name="GroundControlTests">
<workingDirectory>C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot</workingDirectory>
<artifactDirectory>C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot</artifactDirectory>
<prebuild>
<nant>
<executable>C:\Nant\bin\nant.exe
</executable>
<baseDirectory>C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot</baseDirectory>
<nologo>false</nologo>
<buildFile>nant.build</buildFile>
<targetList>
<target>cleanNunit</target>
</targetList>
</nant>
</prebuild>
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
</executable>
<workingDirectory>C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot
</workingDirectory>
<projectFile>GroundControlReboot.sln</projectFile >
<buildArgs>/noconsolelogger
/v:quiet
/noconlog
/p:Configuration=Debug
/p:ReferencePath="C:\Program Files\NUnit 2.5.9\bin;C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/p:AdditionalReferencePath="C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
</buildArgs>
<targets>ReBuild</targets >
<timeout>180</timeout >
<!-- <logger>C:\Program Files\CruiseControl.NET\server\Rodemeyer.MsBuildToCCNet.dll</logger>-->
</msbuild>
<exec>
<executable>C:\Program Files\NUnit 2.5.9\bin\net-2.0\nunit-console.exe
</executable >
<buildArgs>/xml:C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot\nunit-results.xml
C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot\GroundControlReboot\bin\Debug\GroundControlReboot.dll
</buildArgs>
<buildTimeoutSeconds>180</buildTimeoutSeconds>
</exec>
</tasks>
<publishers>
<merge>
<files>
<file>
C:\Source\Wholesale\Code.EventControl.TestingFramework\GroundControlReboot\*-results.xml
</file>
</files>
</merge>
<xmllogger />
<statistics />
<artifactcleanup cleanUpMethod="KeepLastXBuilds"
cleanUpValue="20" />
</publishers>
</project>
</cruisecontrol>
-----dashboard.config-------
<?xml version="1.0" encoding="utf-8"?>
<dashboard>
<remoteServices>
<servers>
<server name="local" url="tcp://localhost:21234/CruiseManager.rem" allowForceBuild="true" allowStartStopBuild="true" backwardsCompatible="false" />
</servers>
</remoteServices>
<plugins>
<farmPlugins>
<farmReportFarmPlugin />
<cctrayDownloadPlugin />
<administrationPlugin password="" />
</farmPlugins>
<serverPlugins>
<serverReportServerPlugin />
</serverPlugins>
<projectPlugins>
<projectReportProjectPlugin />
<viewProjectStatusPlugin />
<latestBuildReportProjectPlugin />
<viewAllBuildsProjectPlugin />
</projectPlugins>
<buildPlugins>
<buildReportBuildPlugin>
<xslFileNames>
<xslFile>xsl\header.xsl</xslFile>
<xslFile>xsl\msbuild2ccnet.xsl</xslFile>
<xslFile>xsl\modifications.xsl</xslFile>
<xslFile>xsl\nant.xsl</xslFile>
<xslFile>xsl\tests.xsl</xslFile>
</xslFileNames>
</buildReportBuildPlugin>
<buildLogBuildPlugin />
</buildPlugins>
<securityPlugins>
<simpleSecurity />
</securityPlugins>
</plugins>
</dashboard>
When I deployed the nunit package from the dashboard admin it generated three things:
Under buildReportBuildPlugin it added xsl\unittests.xsl. This is for the build summary page.
It also generated two items for the sidebar to see nunit details (xsl\tests.xsl) and nunit timings (xsl\timings.xsl). It looks like you have the nunit details xsl file defined for the build summary page which may be why you don't see anything. If you use xsl\unittests.xsl instead (and reload the dashboard so it actually reads the updated file) that may work. Another option is to just deploy the nunit package from the web dashboard administration page which will update the dashboard.config file for you.
<buildPlugins>
<buildReportBuildPlugin>
<xslFileNames>
<xslFile>xsl\header.xsl</xslFile>
<xslFile>xsl\modifications.xsl</xslFile>
<xslFile>xsl\unittests.xsl</xslFile>
</xslFileNames>
</buildReportBuildPlugin>
<buildLogBuildPlugin />
<xslReportBuildPlugin description="NAnt Output" actionName="NAntOutputBuildReport" xslFileName="xsl\NAnt.xsl"></xslReportBuildPlugin>
<xslReportBuildPlugin description="NAnt Timings" actionName="NAntTimingsBuildReport" xslFileName="xsl\NAntTiming.xsl"></xslReportBuildPlugin>
<xslReportBuildPlugin description="NUnit Details" actionName="NUnitDetailsBuildReport" xslFileName="xsl\tests.xsl"></xslReportBuildPlugin>
<xslReportBuildPlugin description="NUnit Timings" actionName="NUnitTimingsBuildReport" xslFileName="xsl\timing.xsl"></xslReportBuildPlugin>
</buildPlugins>