Решение: Для начала нужна зарегистрированная страница в VK. Переходим по ссылке https://vk.com/apps?act=manage и нажимаем "Создать приложение". Название пусть будет "vkLogSend", тип "Standalone-приложение".
На этом работа с сайтом закончена и можем переходить непосредственно к программированию.
Открываем Visual Studio и создаём консольный проект vkLogSend. Далее сразу можно перейти в NuGet и установить два пакета - VkNet (реализация ВКонтакте API для .NET) и NLog (библиотека логгирования для C#).
Далее создаём класс с именем "vkTarget.cs" и содержанием -
using System; using NLog; using NLog.Targets; using VkNet; using VkNet.Enums.Filters; namespace vkLogSend { [Target("vk")] public sealed class VKTarget : TargetWithLayout { public VKTarget() { } protected override void Write(LogEventInfo logEvent) { var logMessage = this.Layout.Render(logEvent); SendTheMessageToRemoteHost(logMessage); } [STAThread] private void SendTheMessageToRemoteHost(string message) { var appId = 111111; // указываем id приложения var email = "user@mail.com"; // email для авторизации var password = "Pa$$w00rd"; // пароль var settings = Settings.Messages; // уровень доступа к данным var api = new VkApi(); api.Authorize(appId, email, password, settings); // авторизуемся api.Messages.Send(1111111, false, message); // посылаем сообщение пользователю } } }
Теперь нужно создать правила для NLog, это делается через создание файла 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"> <extensions> <add assembly="vkLogSend"/> </extensions> <targets> <target name="console" xsi:type="Console" layout="${date:format=HH\:mm\:ss} | ${level} | ${message}" /> <target name="vk" type="vk" layout="${date:format=HH\:mm\:ss} | ${level} | ${message}"/> </targets> <rules> <logger name="*" minlevel="Trace" writeTo="console" /> <logger name="*" minlevel="Trace" writeTo="vk" /> </rules> </nlog>
По сути стандартный файл NLog с добавленной секцией <extensions> и прописывание правила для таргета "vk"
И напоследок использование -
using System; using NLog; namespace vkLogSend { class Program { static Logger logger = LogManager.GetCurrentClassLogger(); static void Main() { logger.Trace("vkLogSend test message. Error on machine: " + Environment.MachineName); Console.WriteLine("Press any key..."); Console.ReadKey(); } } }
И у нас ничего не работает :) В библиотеке VkNet, при установке через NuGet есть ошибка - устанавливаются библиотеки Newtonsoft.Json и HtmlAgilityPack неверных версий. Решение простое - через NuGet обновляем их до последних и всё должно заработать.
После обновления библиотек можем тестировать и отправлять себе логи через Вконтакт.
PS: Есть нюанс при работе - если у вас настроено подтверждение входа (через смс или другим способом), то данный код работать не будет. Имейте это в виду.
Комментариев нет:
Отправить комментарий