Создание нового файла журнала каждый день

Для этой цели также можно использовать средство просмотра Google PDF. Насколько я знаю, это не официальная функция Google (я ошибаюсь в этом?), Но она работает для меня очень красиво и гладко. Вам нужно загрузить свой PDF где-то раньше и просто использовать его URL:

<iframe src="http://docs.google.com/gview?url=http://example.com/mypdf.pdf&embedded=true" style="width:718px; height:700px;" frameborder="0"></iframe>

Важно то, что ему не нужен Flash-плеер, он использует JavaScript.

13
задан John Saunders 24 May 2010 в 16:50
поделиться

8 ответов

Вам не нужно создавать его в определенное время - в простейшем случае вы можете просто проверить, есть ли файл журнала с сегодняшней датой в качестве его имени, когда вы запускаете службу ведения журнала для приложения, и если его нет вы можете создать его до того, как начнете добавлять к нему.

Единственный случай, о котором вам нужно быть особенно внимательным при такой настройке, - это когда приложение запускается за полночь.

3
ответ дан 1 December 2019 в 05:52
поделиться

Я бы порекомендовал что-то вроде этого:

string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!System.IO.File.Exists(logFile))
{
    System.IO.File.Create(logFile);   
}
//append to logFile here...

Есть ли причина, по которой вы хотите что-то создать после полуночи? Почему бы просто не создать его, если он не существует, когда вы идете регистрировать ошибку?

Также заметил, что я изменил формат даты. Это позволит вам сортировать файлы по имени и приводить их в порядок. Я всегда использую этот формат, когда каким-либо образом возился с датами.

8
ответ дан 1 December 2019 в 05:52
поделиться

Обновление 2018: сейчас я предпочитаю использовать NLog

Предыдущий ответ о log4net:

В этом примере показано, как настроить RollingFileAppender для прокрутки файлов журнала в определенный период времени. В этом примере файл журнала будет обновляться каждую минуту! Чтобы изменить скользящий период, настройте значение DatePattern. Например, шаблон даты «ггггММдд» будет катиться каждый день.
См. System.Globalization.DateTimeFormatInfo для получения списка доступных шаблонов.

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\temp\rolling.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMdd-HHmm" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>
39
ответ дан 1 December 2019 в 05:52
поделиться

Другие упоминали Log4Net, поэтому я продолжу и дополню Enterprise Library Logging Block, который также вполне способен делать то, что вы хотите.

Не могли бы вы включить какой-нибудь код, показывающий, насколько легко будет делать эту проверку каждый день? Это проще, чем пример с log4Net? - Дэниел Дайсон

Конечно. Обычно для построения конфигурации используется Enterprise Library Configuration Tool ; К этому инструменту нужно немного привыкнуть, но как только вы поймете, как он работает, он станет довольно мощным. Тем не менее, вы также можете отредактировать app.config вручную.

Вот результат работы упомянутого мною инструмента, который выгружает почти все в непрерывный плоский файл, который обновляется каждый день (или если он превышает 2 МБ). Форматирование предоставляется инструментом по умолчанию.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    </configSections>
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="Category">
        <listeners>
            <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                formatter="Text Formatter" rollInterval="Day" rollSizeKB="2000" />
        </listeners>
        <formatters>
            <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}"
                name="Text Formatter" />
        </formatters>
        <categorySources>
            <add switchValue="All" name="Category">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </add>
        </categorySources>
        <specialSources>
            <allEvents switchValue="All" name="All Events">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </allEvents>
            <notProcessed switchValue="All" name="Unprocessed Category">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </notProcessed>
            <errors switchValue="All" name="Logging Errors &amp; Warnings">
                <listeners>
                    <add name="Rolling Flat File Trace Listener" />
                </listeners>
            </errors>
        </specialSources>
    </loggingConfiguration>
</configuration>
8
ответ дан 1 December 2019 в 05:52
поделиться

Попробуйте NLog ( nlog-project.org ). На мой взгляд, он очень гибкий и с ним проще работать, чем с Log4Net.

Пример NLog.config:

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <targets>
        <target name="file" xsi:type="File"
            layout="${longdate} ${logger} ${message}" 
            fileName="${basedir}/${shortdate}/${windows-identity:domain=false}.${level}.log" />
    </targets>

    <rules>
        <logger name="*" minlevel="Debug" writeTo="file" />
    </rules>
</nlog>

Дополнительные примеры (включая другие цели ведения журнала, кроме File) см. Примеры конфигурации NLog на Github

6
ответ дан 1 December 2019 в 05:52
поделиться

Нет необходимости создавать его, пока он вам не понадобится, используйте:

 file = new StreamWriter(path, true, new UTF8Encoding(false));

(или, может быть, другую кодировку.) Это создаст файл. не существует, или начать добавлять к нему.

Затем нужно создать имя файла и просто его использовать.

0
ответ дан 1 December 2019 в 05:52
поделиться

Когда что-то записываете, проверяйте, существует ли файл с текущей датой, если нет - создайте его. Вот так просто :)

if(fileExists(todaysDate + ".txt")){
  appendToLogFile(message);
}else{
  createFile(todaysDate + ".txt");
  appendToLogFile(message);
}
1
ответ дан 1 December 2019 в 05:52
поделиться

use log4net. Это одна из наиболее часто используемых библиотек для протоколирования.

Она может быть легко настроена по вашему желанию, пожалуйста, обратитесь к примерам.

3
ответ дан 1 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: